2012-10-28 3 views
2

여러 간단한 형태에 의해 정의 된 복잡한 모양을 그릴 원 및 선. android canvas로 이것을 만드는 적절한 방법은 무엇입니까?안드로이드 캔버스 내가 안드로이드 캔버스에이 모양과 비슷한 무언가를 그리려고

지금 smith324로 PorterDuff을 사용하고 UPDATE 제안 :

* 참고 : 코드를 약간 명확성을 위해 단순화.

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

사용하십시오 [태그 : 안드로이드 - 캔버스] 네이티브 자바 안드로이드 캔버스에 대해 이야기 할 때 : 안드로이드 기기에 HTML5 캔버스에 대해 이야기 할 때 [태그 캔버스] –

답변

2

여기서는 어떤 모드가 사용되는지 (XOR이 작동해야 함) 잊어 버렸지 만 기본적으로 PorterDuff 전송 모드를 사용해야합니다. 동심원을 서로 겹쳐서 그리십시오. 그런 다음 한쪽면에 사각형을 만듭니다.

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

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

+1

"[사 + 다 - Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa) + min (Sc, Dc) : 0 –

+0

아, 지금 이해합니다. 고마워! 불행히도 나는 그것을 작동시킬 수없는 것 같습니다. 나는 drawCircle을 사용하여 동심원을 그린 다음 그 위에 사각형을 오버레이하려했습니다. 어떤 모드를 사용하든 관계없이 사각형은 전혀 나타나지 않거나 어디서든 (원의 바깥에도) 나타납니다. –

관련 문제