Как применить динамическую альфа-маску к тексту на Android

#android #android-canvas

#Android #android-холст

Вопрос:

Я хочу создать динамическую альфа-маску с нарисованными фигурами в виде кругов или чего-то еще и применить ее к нарисованному тексту на Android. Вот пример того, чего я хочу : альфа-маска

Я пытаюсь сделать это с setXfermode(new PorterDuffXfermode(Mode.SRC_IN)) помощью, но я не могу заставить это работать. Вот код, который у меня есть в onDraw(Canvas canvas) методе :

 Paint paint = new Paint();
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(Color.WHITE);
canvas.drawCircle(50, 50, 50, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
paint.setColor(Color.RED);
canvas.drawText("hello", 0, 50, paint);
 

Заранее спасибо за вашу помощь

Ответ №1:

Попробуйте создать растровые изображения исходного кода и маски отдельно. Большинство примеров, которые я видел, включают использование двух растровых изображений и использование drawBitmap для выполнения маскировки.

Я использую PorterDuff.Mode.DST_IN для рисования, затем нарисуйте исходное изображение (без рисования), за которым следует изображение маски (с помощью рисования). Что-то вроде этого:

         Bitmap bitmapOut = Bitmap.createBitmap(sizeX, sizeY,
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmapOut);

        Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        xferPaint.setColor(Color.BLACK);

        xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

        canvas.drawBitmap(sourceImage, 0, 0, null);
        canvas.drawBitmap(alphaMask, 0, 0, xferPaint);
 

На данный момент bitmapOut содержит мое замаскированное изображение.