2011-11-01 19 views
9

Quiero hacer una máscara alfa dinámica con formas dibujables como círculos o lo que sea, y aplicarla a un texto dibujado en Android. Aquí es un ejemplo de lo que quiero: alpha maskCómo aplicar una máscara alfa dinámica a un texto en Android

que estoy tratando de hacerlo con setXfermode(new PorterDuffXfermode(Mode.SRC_IN)), pero no puedo conseguir que funcione. Aquí está el código que tengo en onDraw(Canvas canvas) método:

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

Gracias de antemano por su ayuda

Respuesta

10

intente crear su fuente y la máscara de mapas de bits por separado. La mayoría de los ejemplos que he visto implican el uso de dos mapas de bits y el uso de drawBitmap para realizar el enmascaramiento.

Utilizo PorterDuff.Mode.DST_IN para la pintura, luego dibujo la imagen de origen (sin pintura) y luego la imagen de la máscara (con la pintura). Algo como esto:

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

En este punto, bitmapOut contiene mi imagen enmascarada.

Cuestiones relacionadas