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