使用Path.addArc创建圆形扇形裁剪蒙版?

6

我需要创建一个以圆形扇形为形状的剪切蒙版。

我可以使用以下方法绘制一个:

paint.setColor(0x88FF0000);
paint.setStyle(Style.FILL);
canvas.drawArc(oval, 0, 30, true, paint);

我希望将其用作剪切路径,因此我尝试了以下操作:

Path path = new Path();
path.addArc(oval, 0, 30);
canvas.clipPath(path, Op.REPLACE);

然而,addArc没有useCenter参数,因此我得到的不是扇形而是一个弓形段。
2个回答

12

好的,似乎没有一种适当的方法可以使用剪贴蒙版来完成这个任务。

然而,有一种替代方式是使用PorterDuffXfermode。请参见ApiDemos中的Xfermodes。

我简单地使用drawArc在我的图像上绘制了一个扇形,并使用DST_OUT运算符。这使得被扇形所覆盖的图像部分不可见(未被绘制)。

paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(0xFFFFFFFF);
paint.setStyle(Style.FILL);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
drawable.draw(canvas);
canvas.drawArc(oval, 30, 90, true, paint);

什么是 oval - EpicPandaForce
什么是“椭圆”? - EpicPandaForce

2
我需要调整AChartEngine库以将Android上的饼图转换为甜甜圈图。我需要替换以下内容:
canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint);

为了能够使用裁剪,可以使用Path类。以下代码对我很有帮助:

Path path = new Path();
path.moveTo(oval.centerX(), oval.centerY());
path.addArc(oval, startAngle, sweepAngle);
path.lineTo(oval.centerX(), oval.centerY());
canvas.drawPath(path, paint);

我希望这篇文章能够帮助那些像我一样不熟悉Canvas API的人避免一些麻烦。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接