2011-11-01 2 views
9

Desidero creare una maschera alfa dinamica con forme disegnabili come cerchi o altro e applicarla a un testo disegnato su Android. Ecco un esempio di ciò che voglio: alpha maskCome applicare una maschera alfa dinamica a un testo su Android

che sto cercando di farlo con setXfermode(new PorterDuffXfermode(Mode.SRC_IN)), ma non riesco a farlo funzionare. Ecco il codice che ho in onDraw(Canvas canvas) metodo:

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

Grazie in anticipo per il vostro aiuto

risposta

10

provare a creare le vostre bitmap di origine e maschera separatamente. La maggior parte degli esempi che ho visto riguardano l'uso di due bitmap e l'uso di drawBitmap per eseguire il mascheramento.

Uso PorterDuff.Mode.DST_IN per la pittura, quindi disegno l'immagine di origine (senza vernice) seguita dall'immagine della maschera (con la vernice). Qualcosa di simile:

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

A questo punto, bitmapOut contiene la mia immagine mascherata.