#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 содержит мое замаскированное изображение.