Ecco come creare una zona di ritaglio la forma di un cerchio:Su Android, come posso creare aree di ritaglio di forma strana?
Path path = new Path();
path.addCircle(200,200,100,Direction.CW);
c.clipPath(path); // c is a Canvas
Ora c'è una zona di ritaglio sulla tela che impedisce disegnare nulla al di fuori dei limiti di quel cerchio. Ma cosa succede se voglio che l'area di ritaglio sia modellata come una ciambella (o qualsiasi altra cosa)?
Ho provato a giocare con la creazione di un secondo percorso e utilizzando toggleInverseFillType su di esso e quindi aggiungendolo al percorso originale, ma non sembra funzionare.
In alternativa, invece di utilizzare un percorso, è possibile semplicemente creare una bitmap da utilizzare come maschera e impostarla in qualche modo come maschera di ritaglio sulla tela?
MODIFICA: La risposta è esattamente ciò di cui avevo bisogno con una piccola aggiunta. Quando si eseguono più operazioni su una tela, utilizzare sempre Op.REPLACE sulla prima chiamata clipPath. Questo sostituirà qualsiasi clipPath esistente su quella Canvas.
Per riferimento, ecco cosa ho scoperto cosa significano i 6 diversi valori Region.Op. Immagina un diagramma di Venn con 2 cerchi. "B" è la parte in cui i 2 cerchi si sovrappongono. "A" è il cerchio sinistro non sovrapposto. "C" è il cerchio destro non sovrapposto.
c.clipPath(a,Region.Op.REPLACE);
c.clipPath(b,???);
Region.Op.DIFFERENCE -> A..
Region.Op.INTERSECT -> .B.
Region.Op.REPLACE -> .BC
Region.Op.REVERSE_DIFFERENCE -> ..C
Region.Op.UNION -> ABC
Region.Op.XOR -> A.C
"." indica la parte che non è disegnata. Scusa se non è particolarmente chiaro. È difficile descriverlo bene senza grafica.
clipPath non supportato su Android 4 – Renetik
Clippath è supportato bene, se si disattiva l'accelerazione hardware per la visualizzazione/attività /applicazione. La differenza con Android 4+ è che HA è abilitato di default. – Plato
clipPath ora è anche HA in 4.3+ – Ruxton