2016-10-03 6 views
0

Я пытаюсь нарисовать 3 прямоугольника на холсте.
Первый зеленый и идет по спине. Вторая красная и находится над зеленым. Третий идет по обоим из них, и он должен «прорезать» первые два прямоугольника. Что-то вроде этого:PorterDuffXfermode холст с несколькими прямоугольниками, пересекающимися

enter image description here

Я понимаю, что я должен сделать что-то вроде этого:

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

Но что 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());