2010-03-31 14 views
7

Sto appena iniziando con lo sviluppo di Android e vengo dal mondo JavaScript/HTML, quindi attualmente sto studiando le possibilità dell'SDK di Android.Operazioni composite su Android Canvas

La tela HTML 5 supporta operazioni composite (vedere here).

E 'possibile su una tela Android? Ho scansionato l'API della classe Canvas ma non ho trovato nulla di utile. Ho bisogno almeno dell'operazione composita "source-in" o (se questo non è possibile) "source-atop".

risposta

8

La composizione viene gestita disegnando su un Canvas con un Paint che utilizza un PorterDuffXfermode.

Paint p=new Paint(); 
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN)); 
canvas.drawBitmap(bitmap, 0, 0, p); 

Vedi here per maggiori informazioni. Sono anche riuscito a ignorare lo onPaint in modo da poter applicare questa composizione a elementi che disegnano temi.

1

Non ho mai provato questo tipo di operazioni prima, ma penso che ci sia un modo per farlo usando la forma Rect. È possibile definire rettangoli per contrassegnare quali aree devono essere disegnate nell'area di disegno o per rimuovere l'immagine di origine e la classe Rect ha alcune funzioni di confronto integrate. Ad esempio per imitare un source-in, è possibile utilizzare setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination) per fare in modo che il nuovo rettangolo abbia solo l'area intersecata delle due immagini. Quindi puoi usare quel rettangolo come argomento in uno dei comandi di disegno di Canvas, dicendogli di prendere solo i pixel dall'immagine sorgente che si trovano all'interno di quel rettangolo. Quindi si controlla il disegno sull'asse Z dall'ordine in cui vengono eseguiti i comandi di disegno.

+0

Il semplice ritaglio con i rettangoli non è sufficiente. Ho bisogno di maschere alfa complesse. – kayahr

+0

Stavo solo seguendo le due immagini di esempio mostrate nel link: gli esempi di origine e di origine non sembravano presentare mascheramento alfa. Se è quello che cerchi, a mano a mano, non so come farlo. Le tele supportano la trasparenza tra "strati" di immagini disegnate l'una sopra l'altra a patto che le immagini abbiano già quella trasparenza incorporata, ma qualcuno più esperto dovrà dirci se è possibile eseguire la fusione automaticamente. –

1

Trovato da solo. PorterDuffXfermode implementa tutte queste modalità composite.