2012-10-28 49 views
2

我想提请类似这种形状在Android帆布东西定义的复杂形状:Android的画布上绘制由多个简单的形状

http://i.imgur.com/eQOHz.png

我认为最好的方法是定义这个形状的2交集圆圈和一条线。用android canvas创建这个的正确方法是什么?

UPDATE 我现在用PorterDuff作为smith324建议:

*注:代码稍有简化了清晰度。

darkPaint = new Paint(); 
darkPaint.setColor(Color.rgb(50, 50, 50)); 

lightPaint = new Paint(); 
lightPaint.setColor(Color.rgb(200, 200, 200)); 

atopPaint= new Paint(GameDrawingPanel.darkPaint.getColor()); 
atopPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP)); 
atopPaint.setAntiAlias(true); 
atopPaint.setStrokeWidth(2); 

_boardCanvas.drawCircle(x, y, radius, darkPaint); 
_boardCanvas.drawCircle(x, y, radius_small, lightPaint); 
_boardCanvas.drawRect(0,0,height,width,atopPaint); 
+1

请使用[标签:Android的帆布]当谈论的本地Java的Android帆布和[标签:帆布]谈到Android设备上的HTML5画布时 –

回答

2

我忘了到底哪个模式会利用这里(XOR应该工作),但本质上,你需要使用PorterDuff传输模式来实现这一目标。尝试在彼此顶部绘制同心圆,然后在一侧绘制一个分割矩形。

http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html

http://www.svgopen.org/2005/papers/abstractsvgopen/

+1

“[SA +大 - Sa * Da,Sc *(1-Da)+ Dc *(1-Sa)+ min(Sc,Dc)]“这一切意味着什么? :0 –

+0

啊,我现在明白了。感谢你!不幸的是我似乎无法让它工作。我用drawCircle绘制了一些同心圆,并试图在它上面覆盖一个矩形。无论使用哪种模式,该矩形要么完全不显示,要么出现在任何地方(甚至在圆圈之外)。 –