源码出自:http://blog.csdn.net/lmj623565791/article/details/24500107
@Override protected void onDraw(Canvas canvas) { int centre = getWidth() / 2; // 获取圆心的相对坐标,注意是相对坐标 // 这里我计算的是边界点 int radius = centre - mCircleWidth; //半径 mPaint.setStrokeWidth(mCircleWidth); // 设置圆环的宽度 mPaint.setAntiAlias(true); // 消除锯齿 mPaint.setStyle(Paint.Style.STROKE); // 设置空心 // 这里我传入的是边界点,所以画出来的圆比作者的小 RectF oval = new RectF(centre - radius, centre - radius, centre + radius, centre + radius); // 用于定义的圆弧的形状和大小的界限 if (!isNext) { // 第一颜色的圈完整,第二颜色跑 mPaint.setColor(mFirstColor); // 设置圆环的颜色 /** * drawCircle: * cx:圆心的x坐标。 cy:圆心的y坐标。 radius:圆的半径。 paint:绘制时所使用的画笔。 */ canvas.drawCircle(centre, centre, radius, mPaint); // 画出圆环 mPaint.setColor(mSecondColor); // 设置弧度的颜色 /** * drawArc: * oval :指定圆弧的外轮廓矩形区域。注意是外轮廓! startAngle: 圆弧起始角度,单位为度。 sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度。 useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。 paint: 绘制圆弧的画板属性,如颜色,是否填充等。 */ canvas.drawArc(oval, -90, mProgress, false, mPaint); // 根据进度画圆弧 } else { mPaint.setColor(mSecondColor); // 设置圆环的颜色 canvas.drawCircle(centre, centre, radius, mPaint); // 画出圆环 mPaint.setColor(mFirstColor); // 设置弧度的颜色 canvas.drawArc(oval, -90, mProgress, false, mPaint); // 根据进度画圆弧 } }