我似乎无法弄明白。我试图绘制一个分段的圆圈(看起来像圆圈内的圆圈)。但是我希望这些线段具有特定的颜色,并且在较小的圆圈内是透明的。优选地,我想使分割线的颜色不同于圆
以下是我想到的解决方案:
1-绘制具有较大圆圈的填充颜色的圆弧,并为小圆圈绘制圆形。 2个问题。首先是内圈区域不再透明,因为它从较大的区域获取颜色。第二个问题是外圆的分割线一直到中心(不仅是内圆周边)
2)绘制较大外圆的弧线并绘制内圆的圆圈。将其设置为彩色填充,但不要显示笔画。然后在顶部绘制另一个外圈,没有填充只是为了显示笔画。然后使用计算(角度和半径)在内圆和外圆之间绘制线条以确定线条的位置......非常复杂的解决方案,必须有另一种方式。即使有这个解决方案,仍然有中心显示颜色的问题,但也许有梯度可以帮助。
我在SO上阅读了很多,但我无法找到正确的答案,因为许多答案会删除对圆参数的控制
HEELP !!!
答案 0 :(得分:3)
@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);
}
我使用Path类和笔画绘制弧。 Style.STROKE给出弧线而不填充。笔划宽度设置为大小/ 4,这是视图的四分之一。这个笔画宽度的一半在外面,后半部分在里面,如下:
xxxxxxxx宽度为5的弧的外边界
XXXXXXXX
------------中风
XXXXXXXX
弧的内边界xxxxxxxx
这就是为什么我使用插图的原因 - 我需要稍微偏移笔画以使其适合视图。如果没有插图,弧线会被视图的所有四边切割。
为什么帆布旋转?因为使用内置方法旋转画布比手动计算线更容易。旋转使用三角函数,很快变得非常复杂,难以阅读且容易出错。基本上我是在旋转纸张并绘制直线。