2016-10-03 5 views
0

캔버스에 3 개의 직사각형을 그리려합니다.
첫 번째 것은 녹색이며 뒤쪽으로 진행됩니다. 두 번째는 빨간색이고 녹색은 두 번째입니다. 세 번째는 두 가지 모두를 다루며 첫 두 개의 rect를 "잘라야"합니다. 이런 식으로 뭔가 :PorterDuffXfermode canvas 여러 개의 직사각형이 교차하는 경우

enter image description here

나는 이런 식으로 뭔가를해야한다고 얻을 :

 canvas.drawColor(red); 
    canvas.drawRect(greenRect, paintGreen); 
    canvas.drawRect(smallRect, paintWithSomePorterduff); 
    canvas.drawRect(redRect, paintRed); 
    canvas.drawRect(smallRect, paintWithSomePorterduff); 

그러나 하나의 RECT 클립 모든 구멍을하지하는 방법과 사용하는 것을 PorterDuffXfermode 그 중은이를 얻을 :

enter image description here

PS 1 초 또는 2 초마다 다시 그리기 때문에 다른 비트 맵을 만들 수 없습니다.

답변

0

비트 맵을 만들어 다시 그려야 만했습니다.

canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 
canvas.drawColor(colorBottom); 
timeBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
timeCanvas = new Canvas(timeBitmap); 
timeCanvas.drawArc(oval, 270, secRot, true, secondHandPaint); 

timePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR)); 
timeCanvas.drawText(time, xOffset, yOffset, timePaint); 
canvas.drawBitmap(timeBitmap, 0, 0, new Paint());