Canvas提供了drawArc来绘制圆弧。
public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
oval :指定圆弧的外轮廓矩形区域。
startAngle: 圆弧起始角度,单位为度。
sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度。
useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。
paint: 绘制圆弧的画板属性,如颜色,是否填充等。
本例演示了drawArc的四种不同用法:
1.填充圆弧但不含圆心、
2.填圆弧含圆心(扇形)
3.绘制圆周但不含圆心
4.绘制圆周含圆心(扇形)
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[] mPaints;
//定义绘制边框时的画笔
private Paint mFramePaint;
//是否包含圆心
private boolean[] mUseCenter;
//定义绘制四种圆弧时的边框
private RectF mOvals[];
//定义绘制大圆弧时的边框
private RectF mBigOval;
//定义起始的角度和圆弧扫过的角度
private float mStart;
private float mSweep;
private int mBigIndes;
//定义角度和扫过的角度的变化幅度
private static final float START_INC=;
private static final float SWEEP_INC=;
public SampleView(Context context) {
super(context);
mPaints=new Paint[];
mUseCenter=new boolean[];
mOvals=new RectF[];
//定义第一种画笔,用88%透明度的红色填充,不包含圆心
mPaints[]=new Paint();
mPaints[].setAntiAlias(true);
mPaints[].setStyle(Paint.Style.FILL);
mPaints[].setColor();
mUseCenter[]=false;
//定义第二种画笔,用88%透明度的绿色填充,包含圆心
mPaints[]=new Paint(mPaints[]);
mPaints[].setColor();
mUseCenter[]=true;
//定义第三种画笔,用88%透明度的蓝色绘制圆周,不包含圆心
mPaints[]=new Paint(mPaints[]);
mPaints[].setStyle(Paint.Style.STROKE);
mPaints[].setStrokeWidth();
mPaints[].setColor();
mUseCenter[]=false;
//定义第四种画笔,用88%透明度的灰色绘制圆周,包含圆心
mPaints[]=new Paint(mPaints[]);
mPaints[].setColor();
mUseCenter[]=true;
//定义绘制包含圆弧的边框
//大圆弧的边框
mBigOval=new RectF(, , , );
//四个小圆弧边框
mOvals[]=new RectF(, , , );
mOvals[]=new RectF(, , , );
mOvals[]=new RectF(, , , );
mOvals[]=new RectF(, , , );
//定义绘制边框的画笔
mFramePaint=new Paint();
mFramePaint.setAntiAlias(true);
mFramePaint.setStyle(Paint.Style.STROKE);
//设置空心线宽
mFramePaint.setStrokeWidth();
}
//重写ondraw方法绘制图形
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
//绘制大的圆弧和边框
drawArcs(canvas,mBigOval,mUseCenter[mBigIndes],mPaints[mBigIndes]);
//绘制小的圆弧和边框
for(int i=;i<mOvals.length;i++){
drawArcs(canvas, mOvals[i], mUseCenter[i], mPaints[i]);
}
mSweep+=SWEEP_INC;
//当绘制完整个圆形后,在新的位置重新开始绘制另一个圆弧
if(mSweep>){
mSweep-=;
mStart+=START_INC;
if(mStart>){
mStart-=;
}
mBigIndes=(mBigIndes+)%mOvals.length;
}
invalidate();
}
//绘制边框的圆弧
private void drawArcs(Canvas canvas, RectF oval, boolean useCenter,
Paint paint) {
//绘制边框
canvas.drawRect(oval, mFramePaint);
//绘制圆弧
canvas.drawArc(oval, mStart, mSweep, useCenter, paint);
}
}
}