public class CircleView extends View {
private Paint paint;
private SweepGradient mSweepGradient;
public CircleView(Context context) {
this(context,null);
}
public CircleView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CircleView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
paint=new Paint();
//设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
paint.setAntiAlias(true);
paint.setColor(Color.RED);
/**
Android在用画笔的时候有三种Style,分别是
Paint.Style.STROKE 只绘制图形轮廓(描边)
Paint.Style.FILL 只绘制图形内容
Paint.Style.FILL_AND_STROKE 既绘制轮廓也绘制内容
*/
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(20);
// 设置渐变
int[] mGradientColors = {Color.GREEN, Color.YELLOW, Color.RED};
mSweepGradient = new SweepGradient(250-10, 250-10, mGradientColors, null);
paint.setShader(mSweepGradient);
paint.setStrokeCap(Paint.Cap.ROUND);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(500,500);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画布旋转135度,围绕中心点旋转
canvas.rotate(135,250,250);
/**
oval :指定圆弧的外轮廓矩形区域。
startAngle: 圆弧起始角度,单位为度。
sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度,从右中间开始为零度。
useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。关键是这个变量,下面将会详细介绍。
*/
canvas.drawArc(new RectF(10,10,490,490),0,270,false,paint);
}
}
运行结果