2012-05-13 32 views
6

我需要创建一个具有扇形形状的剪贴蒙版。圆形扇形与Path.addArc的剪贴蒙版?

我能够用得出下列操作之一:

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参数,所以我得到的不是一个扇区而是一个段。

回答

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); 
2

我需要调整Android的AChartEngine库才能将饼图变成圆环图。我需要替换以下内容:

canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint); 

通过使用Path类以便能够使用裁剪。以下代码为我完成了这项工作:我希望这可以为不熟悉Canvas API的人节省一些头疼的问题。