您的位置:首页 > 移动开发 > Android开发

Android Api Demos登顶之路(八十七)Graphics-->RoundRect

2015-10-07 06:44 573 查看
/*
* 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();
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: