不废话,直接上源代码
/**
* 绘制双色弧形渐变
* @param canvas 画布
* @param startColor 渐变的开始颜色
* @param endColor 渐变的结束颜色
* @param cx 圆弧的中心x坐标
* @param cy 圆弧的中心y坐标
* @param size 圆弧的矩形大小
* @param sweepAngle 弧形的扫描角度
* @param strokeWidth 绘制圆弧的线宽
*/
private void drawGradient(Canvas canvas, int startColor, int endColor,int cx,int cy ,int size,float sweepAngle,float strokeWidth) {
// 创建一个画笔对象
Paint paint = new Paint();
// 设置画笔的样式为实线
paint.setStyle(Paint.Style.STROKE);
// 设置画笔的线宽为40
paint.setStrokeWidth(strokeWidth);
// 创建一个颜色数组,包含起始颜色和结束颜色
int [] colors = {startColor,endColor};
// 创建一个浮点数数组,用于设置颜色的位置
float[] position = new float[2];
//将扫描角限制在360度以内
sweepAngle=sweepAngle%360;
float startAngle=90+(360f-sweepAngle)/2f;
// 设置颜色数组的位置
position[0] = 0;
position[1] = (sweepAngle* 1.0f)/360f;
// 创建一个扫过的渐变对象
SweepGradient sweepGradient = new SweepGradient(cx, cy, colors, position);
// 创矩阵对象
Matrix gradientMatrix = new Matrix();
// 将矩阵旋转startAngle度
gradientMatrix.setRotate(startAngle, cx, cy);
// 载入旋转矩阵
sweepGradient.setLocalMatrix(gradientMatrix);
// 将渐变对象设置给画笔的着色器
paint.setShader(sweepGradient);
// 设置圆弧的半径
int radius=size / 2;
//创建圆弧的矩形区域
RectF rect=new RectF(cx - radius, cy - radius, cx + radius, cy + radius);
// 在画布上绘制一个圆弧
canvas.drawArc( rect,startAngle, sweepAngle, false, paint);
}
效果图: