Как применить динамическую альфа-маску к тексту на Android - PullRequest
9 голосов
/ 01 ноября 2011

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

Я пытаюсь сделать это с 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 Ответ

10 голосов
/ 30 ноября 2011

Попробуйте создать свой источник и маскировать растровые изображения отдельно. Большинство примеров, которые я видел, включают использование двух растровых изображений и использование 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 содержит мое замаскированное изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...