PorterDuffXfermode холст с несколькими пересекающимися прямыми линиями

#android #canvas #rect #porter-duff

#Android #холст #прямоугольник #портер-дафф

Вопрос:

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

введите описание изображения здесь

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

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

Но какой PorterDuffXfermode использовать, и как обрезать только один прямоугольник, а не делать отверстие через все из них и получить это:

введите описание изображения здесь

PS Я не могу создавать разные растровые изображения, а затем рисовать их, потому что он будет перерисовывать его каждые 1 или 2 секунды.

Ответ №1:

Я должен был сделать это, создав растровое изображение и перерисовав его.

 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());