프쟁이 입니다.
모서리가 둥근 사각형 안을 그라데이션 방식으로 색상을 채우고 있습니다.
여섯개의 모서리 둥근 사각형을 각 그라데이션 옵션별로 색상을 채우고 있습니다.
GradientDrawable 객체를 생성하여 그리기를 수행하면 그라데이션을 적용할 수 있습니다.
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.korsoft.Test003;
import net.korsoft.Test003.R;
import android.app.Activity;
import android.content.Context;
import android.graphics.*;
import android.graphics.drawable.*;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.*;
/*
* 모서리가 둥근 사각형 안을 그라데이션 방식으로 색상을 채우고 있습니다.
* 여섯개의 모서리 둥근 사각형을 각 그라데이션 옵션별로 색상을 채우고 있습니다.
* GradientDrawable 객체를 생성하여 그리기를 수행하면 그라데이션을 적용할 수 있습니다.
*/
public class RoundRects extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
private static class SampleView extends View {
private Path mPath;
private Paint mPaint;
private Rect mRect;
private GradientDrawable mDrawable;
public SampleView(Context context) {
super(context);
setFocusable(true);
mPath = new Path();
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mRect = new Rect(0, 0, 120, 120);
//GradientDrawable.Orientation.TL_BR : 왼쪽에서 우측으로 그라데이션 적용
//정수배열 : 그라데이션 시작색상값과 종료색상값
mDrawable = new GradientDrawable(GradientDrawable.Orientation.TL_BR,
new int[] { 0xFFFF0000, 0xFF00FF00,
0xFF0000FF });
//사각형 영역을 그리기 객체에 설정합니다.
mDrawable.setShape(GradientDrawable.RECTANGLE);
//그라데이션 각도를 설정합니다.
mDrawable.setGradientRadius((float)(Math.sqrt(2) * 60));
}
//사각형의 모서리를 둥글게 설정하는 메소드입니다.
static void setCornerRadii(GradientDrawable drawable, float r0,
float r1, float r2, float r3) {
drawable.setCornerRadii(new float[] { r0, r0, r1, r1,
r2, r2, r3, r3 });
}
/*
* (non-Javadoc)
* @see android.view.View#onDraw(android.graphics.Canvas)
* 실제 그리기를 수행하는 메소드입니다.
*/
@Override protected void onDraw(Canvas canvas) {
//생성자에서 그라데이션 등을 설정한 그리기 객체에
//사각형 영역을 경계선으로 설정합니다.
mDrawable.setBounds(mRect);
//사각형 모서리의 둥글게 할 정도를 수치로 설정합니다.
float r = 16;
//그라데이션의 각 옵션별로 모서리 둥근 사각형을 차례대로
//원점을 이동해가면서, 출력을 하고 있습니다.
canvas.save();
canvas.translate(10, 10);
mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
setCornerRadii(mDrawable, r, r, 0, 0);
mDrawable.draw(canvas);
canvas.restore();
canvas.save();
canvas.translate(10 + mRect.width() + 10, 10);
mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
setCornerRadii(mDrawable, 0, 0, r, r);
mDrawable.draw(canvas);
canvas.restore();
canvas.translate(0, mRect.height() + 10);
canvas.save();
canvas.translate(10, 10);
mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
setCornerRadii(mDrawable, 0, r, r, 0);
mDrawable.draw(canvas);
canvas.restore();
canvas.save();
canvas.translate(10 + mRect.width() + 10, 10);
mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT);
setCornerRadii(mDrawable, r, 0, 0, r);
mDrawable.draw(canvas);
canvas.restore();
canvas.translate(0, mRect.height() + 10);
canvas.save();
canvas.translate(10, 10);
mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT);
setCornerRadii(mDrawable, r, 0, r, 0);
mDrawable.draw(canvas);
canvas.restore();
canvas.save();
canvas.translate(10 + mRect.width() + 10, 10);
mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT);
setCornerRadii(mDrawable, 0, r, 0, r);
mDrawable.draw(canvas);
canvas.restore();
}
}
}