如何为显示温度变化的弧形设置蓝绿红三色渐变?
解决弧形渐变颜色分布不均的问题
嘿,这个问题我之前做自定义View的时候也踩过坑!你现在用的LinearGradient是线性渐变,它是沿着你指定的垂直方向(0,0到0,getHeight())来铺色的,但你画的是弧形,渐变方向和弧形的路径完全不匹配,颜色自然就会分布得乱七八糟啦。
要实现弧形上从蓝→绿→红的均匀过渡,你得用扫描渐变(SweepGradient),它是围绕中心点做环形的颜色过渡,正好适配弧形的绘制需求。
修改后的代码示例
// 先拿到弧形矩形的中心点,这是扫描渐变的圆心 float centerX = mArcRect.centerX(); float centerY = mArcRect.centerY(); // 创建扫描渐变:以弧形中心为圆心,颜色数组对应蓝、绿、红,位置数组对应渐变的0%、50%、100%节点 SweepGradient sweepGradient = new SweepGradient( centerX, centerY, new int[]{blue, green, red}, new float[]{0f, 0.5f, 1.0f} ); // 给画笔设置这个扫描渐变 mProgressPaint.setShader(sweepGradient); // 正常绘制你的弧形 canvas.drawArc(mArcRect, 0, 300, false, mProgressPaint);
额外注意点
- 因为Android画布的角度是从**3点钟方向(0度)**顺时针递增的,如果你觉得渐变的起始位置不对(比如想从12点钟方向开始),可以用Matrix旋转渐变:
Matrix matrix = new Matrix(); // 旋转-90度,让渐变起始点转到12点钟方向 matrix.postRotate(-90, centerX, centerY); sweepGradient.setLocalMatrix(matrix); - 确保
SweepGradient的渐变范围和你drawArc的角度范围(0到300度)一致,这样颜色过渡才会完全贴合弧形的长度。
这样修改后,你的弧形就能完美实现起始蓝色、中间绿色、末尾红色的均匀渐变啦!
内容的提问来源于stack exchange,提问作者BAbhilash
相关产品推荐
相关产品推荐

