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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der
Canvas
javadoc:Canvas#clipPath(Path path, Region.Op op)
- Ändern Sie den aktuellen clip mit dem angegebenen Pfad.So, für Ihren donut-Beispiel:
Canvas#clipPath( Path )
bei größeren KreisPath
.Rufen Sie die
Canvas#clipPath( Path, Region.Op )
Methode auf deine Leinwand mit dem kleineren KreisPath
für das erste argument und die entsprechendenRegion.Op
enum-Wert für das zweite argument.Wieder, ändern Sie die
Region.Op
enum-Wert um verschiedene Effekte...InformationsquelleAutor der Antwort jarrad