2012-05-13 4 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를 참조하십시오.

DST_OUT 연산자를 사용하여 내 이미지 위에 drawArc을 사용하여 섹터를 그립니다. 이것은 섹터에 의해 덮힌 이미지의 부분을 보이지 않게합니다.

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

안드로이드 용 AChartEngine 라이브러리를 조정하여 원형 차트를 도넛 형 차트로 변환해야했습니다. 다음을 바꾸어야했습니다. 클리핑을 사용하려면 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); 

나는이 자신과 캔버스 API에 익숙하지 않은 사람들에게 약간의 두통을 절약 할 수 있기를 바랍니다.