如何按一定要求绘制这样的分段圆
How to draw segmented circle like this with certain requirements
我好像想不通。我正在尝试绘制一个分段的圆圈(看起来像圆圈内的圆圈)。但是我希望这些段具有特定的颜色并且在较小的圆圈内是透明的。最好,我想让分段线的颜色不同于圆
以下是我想到的解决方案:
1- 大圆用填充色画圆弧,小圆画圆。 2个问题。第一个是内圈区域不再透明,因为它采用了较大区域的颜色。第二个问题是外圈的分割线一直到中心(不仅到内圈周长)
2) 大外圈画弧,内圈画圆。将其设置为颜色填充但不显示笔划。然后在顶部绘制另一个没有填充的外圈,只是为了显示笔划。然后使用计算(角度和半径)在内外圆之间画线以确定线的位置......非常复杂的解决方案,必须有另一种方法。即使使用此解决方案,中心显示的颜色仍然存在问题,但使用渐变可能会有所帮助。
我读了很多关于 SO 的内容,但我想不出正确的答案,因为许多答案会取消对圆参数的控制
求救!!!
@Override
public void draw(Canvas canvas) {
float size = Math.min(getWidth(),getHeight());
paint.setStrokeWidth(size/4);
paint.setStyle(Paint.Style.STROKE);
final RectF oval = new RectF(0, 0, getWidth(), getHeight());
oval.inset(size/8,size/8);
paint.setColor(Color.RED);
Path redPath = new Path();
redPath.arcTo(oval, 0, 120, true);
canvas.drawPath(redPath, paint);
paint.setColor(Color.GREEN);
Path greenPath = new Path();
greenPath.arcTo(oval, 120, 120, true);
canvas.drawPath(greenPath, paint);
paint.setColor(Color.BLUE);
Path bluePath = new Path();
bluePath.arcTo(oval, 240, 120, true);
canvas.drawPath(bluePath, paint);
paint.setStrokeWidth(2);
paint.setColor(0xff000000);
canvas.save();
for(int i=0;i<360;i+=40){
canvas.rotate(40,size/2,size/2);
canvas.drawLine(size*3/4,size/2,size,size/2,paint);
}
canvas.restore();
final RectF ovalOuter = new RectF(0, 0, getWidth(), getHeight());
ovalOuter.inset(1,1);
canvas.drawOval(ovalOuter,paint);
final RectF ovalInner = new RectF(size/4, size/4, size*3/4,size*3/4);
canvas.drawOval(ovalInner,paint);
}
我正在使用路径 class 和笔划绘制圆弧。 Style.STROKE 给出没有填充的圆弧。描边宽度设置为 size/4,即视图的四分之一。笔划宽度的一半在外面,另一半在里面,像这样:
xxxxxxxx 宽度为 5 的圆弧的外边界
xxxxxxxx
------------行程
xxxxxxxx
xxxxxxxx 圆弧内边界
这就是我使用插图的原因 - 我需要稍微偏移笔划以使其适合视图。没有插图,弧线被视图的所有四个边切割。
为什么 canvas 旋转?因为用 built-in 方法旋转 canvas 比手动计算线更容易。旋转使用三角函数并很快变得非常复杂,难以阅读且容易出错。基本上我在旋转纸张并画直线。
我好像想不通。我正在尝试绘制一个分段的圆圈(看起来像圆圈内的圆圈)。但是我希望这些段具有特定的颜色并且在较小的圆圈内是透明的。最好,我想让分段线的颜色不同于圆
以下是我想到的解决方案:
1- 大圆用填充色画圆弧,小圆画圆。 2个问题。第一个是内圈区域不再透明,因为它采用了较大区域的颜色。第二个问题是外圈的分割线一直到中心(不仅到内圈周长)
2) 大外圈画弧,内圈画圆。将其设置为颜色填充但不显示笔划。然后在顶部绘制另一个没有填充的外圈,只是为了显示笔划。然后使用计算(角度和半径)在内外圆之间画线以确定线的位置......非常复杂的解决方案,必须有另一种方法。即使使用此解决方案,中心显示的颜色仍然存在问题,但使用渐变可能会有所帮助。
我读了很多关于 SO 的内容,但我想不出正确的答案,因为许多答案会取消对圆参数的控制
求救!!!
@Override
public void draw(Canvas canvas) {
float size = Math.min(getWidth(),getHeight());
paint.setStrokeWidth(size/4);
paint.setStyle(Paint.Style.STROKE);
final RectF oval = new RectF(0, 0, getWidth(), getHeight());
oval.inset(size/8,size/8);
paint.setColor(Color.RED);
Path redPath = new Path();
redPath.arcTo(oval, 0, 120, true);
canvas.drawPath(redPath, paint);
paint.setColor(Color.GREEN);
Path greenPath = new Path();
greenPath.arcTo(oval, 120, 120, true);
canvas.drawPath(greenPath, paint);
paint.setColor(Color.BLUE);
Path bluePath = new Path();
bluePath.arcTo(oval, 240, 120, true);
canvas.drawPath(bluePath, paint);
paint.setStrokeWidth(2);
paint.setColor(0xff000000);
canvas.save();
for(int i=0;i<360;i+=40){
canvas.rotate(40,size/2,size/2);
canvas.drawLine(size*3/4,size/2,size,size/2,paint);
}
canvas.restore();
final RectF ovalOuter = new RectF(0, 0, getWidth(), getHeight());
ovalOuter.inset(1,1);
canvas.drawOval(ovalOuter,paint);
final RectF ovalInner = new RectF(size/4, size/4, size*3/4,size*3/4);
canvas.drawOval(ovalInner,paint);
}
我正在使用路径 class 和笔划绘制圆弧。 Style.STROKE 给出没有填充的圆弧。描边宽度设置为 size/4,即视图的四分之一。笔划宽度的一半在外面,另一半在里面,像这样:
xxxxxxxx 宽度为 5 的圆弧的外边界
xxxxxxxx
------------行程
xxxxxxxx
xxxxxxxx 圆弧内边界
这就是我使用插图的原因 - 我需要稍微偏移笔划以使其适合视图。没有插图,弧线被视图的所有四个边切割。
为什么 canvas 旋转?因为用 built-in 方法旋转 canvas 比手动计算线更容易。旋转使用三角函数并很快变得非常复杂,难以阅读且容易出错。基本上我在旋转纸张并画直线。