Auf Android Wie mache ich seltsam geformte Clipping-Bereiche?

Hier ist, wie man einen clipping-Bereich die Form eines Kreises:

Path path = new Path();
path.addCircle(200,200,100,Direction.CW);
c.clipPath(path); //c is a Canvas

Nun gibt es ein clipping-Bereich auf der Leinwand, die verhindert, dass die Zeichnung alles, was außerhalb der Grenzen dieses Kreises. Aber, was, wenn ich die clipping-Bereich geformt wie ein donut (oder was auch immer)?

Habe ich versucht zu spielen, um mit der Erstellung eines zweiten Pfads und Verwendung toggleInverseFillType auf Sie und dann hinzufügen, dass der ursprüngliche Weg, aber das scheint nicht zu funktionieren.

Alternativ, anstelle der Verwendung einer Pfad, ist es möglich, erstellen Sie einfach eine Bitmap zu verwenden, als Maske und als Schnittmaske auf die Leinwand irgendwie?

EDIT: Die Antwort ist genau das, was ich brauchte, mit einem kleinen Zusatz. Wenn dabei mehrere Operationen auf einer Leinwand, verwenden Sie immer die Op. ERSETZEN, die auf den ersten clipPath nennen. , Die Sie ersetzen werden alle vorhandenen clipPath auf, der Leinwand.

Referenz, hier ist, was ich entdeckt habe, was die 6 anderen Region.Op-Werte bedeuten. Stellen Sie sich ein venn-Diagramm mit 2 Kreisen. "B" ist der Teil, wo die 2 Kreise sich überschneiden. "A" ist die nicht-überlappenden linken Kreis. "C" ist die nicht-überlappenden rechten Kreis.

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

Dem "." gibt den Teil, der nicht gezeichnet. Sorry, wenn das nicht besonders klar. Es ist schwer zu beschreiben, auch ohne Grafiken.

InformationsquelleAutor der Frage HappyEngineer | 2012-02-14

Schreibe einen Kommentar