/*
* GradientDrawable可以用于绘制渐变的图形,本例演示了用该类绘制带圆角的矩形
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
private class SampleView extends View {
private Paint mPaint;
private Rect mRect;
private GradientDrawable mDrawable;
public SampleView(Context context) {
super(context);
setFocusable(true);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mRect = new Rect(0, 0, 120, 120);
// 定义赏渐变的图形,方向由左上到右下,颜色由红、绿、蓝渐变
mDrawable = new GradientDrawable(
GradientDrawable.Orientation.TL_BR, new int[] { 0xffff0000,
0xff00ff00, 0xff0000ff });
// 设置渐变的图形
mDrawable.setShape(GradientDrawable.RECTANGLE);
// 设置渐变的半径
mDrawable.setGradientRadius((float) Math.sqrt(2) * 60);
}
/**
* 设置圆角
*
* @param drawable
* 需要设置圆角的矩形
* @param r0
* 左上角的半径
* @param r1
* 右上角的半径
* @param r2
* 左下角的半径
* @param r3
* 右下角的半径
*/
private void setCornerRadii(GradientDrawable drawable, float r0,
float r1, float r2, float r3) {
// 分别设置四个圆角在横向和纵向上的半径
drawable.setCornerRadii(new float[] { r0, r0, r1, r1, r2, r2, r3,
r3, });
}
@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();
}
}
}
09-25