API-Referenz: Path
Die Path-Klasse repräsentiert komplexe, zusammengesetzte geometrische Pfade, die aus geraden Liniensegmenten, quadratischen Kurven und kubischen Kurven bestehen.
Hinweis: Zum Erstellen neuer Pfade wird dringend empfohlen, PathBuilder zu verwenden, anstatt Methoden direkt auf
Pathaufzurufen.PathBuilderbietet eine bessere fließende API und stellt sicher, dass der resultierendePathunveränderlich ist.
Einen Pfad erstellen (Statische Fabrikmethoden)
Während PathBuilder für komplexe Pfade bevorzugt wird, bietet Path effiziente statische Fabrikmethoden für häufige Formen.
makeRect(rect): Erstellt einen Pfad aus einem Rechteck.makeOval(rect): Erstellt einen Pfad aus einem Oval.makeCircle(x, y, radius): Erstellt einen Pfad aus einem Kreis.makeRRect(rrect): Erstellt einen Pfad aus einem abgerundeten Rechteck.makeLine(p1, p2): Erstellt einen Pfad aus einem einzelnen Liniensegment.makePolygon(points, closed): Erstellt einen Pfad aus einer Punktfolge.makeFromSVGString(svgString): Parst einen SVG-Pfad-String (z.B."M10 10 L50 50 Z").
Pfadinformationen & Metriken
getBounds(): Gibt die konservative Begrenzungsbox zurück (schnell, gecached).computeTightBounds(): Gibt die präzise Begrenzungsbox zurück (langsamer).isEmpty(): Gibt true zurück, wenn der Pfad keine Verben enthält.isConvex(): Gibt true zurück, wenn der Pfad eine konvexe Form definiert.isRect(): Gibt dasRectzurück, wenn der Pfad ein einfaches Rechteck darstellt, sonst null.isOval(): Gibt die umschließendeRectzurück, wenn der Pfad ein Oval ist, sonst null.isFinite(): Gibt true zurück, wenn alle Punkte im Pfad endlich sind.
Treffertests
contains(x, y): Gibt true zurück, wenn der angegebene Punkt innerhalb des Pfades liegt (basierend auf dem aktuellen Fülltyp).conservativelyContainsRect(rect): Gibt true zurück, wenn das Rechteck definitiv innerhalb des Pfades liegt (schneller Ablehnungstest).
Boolesche Operationen
Pfade können mit logischen Operationen kombiniert werden. Diese erstellen ein neues Path-Objekt.
Path result = Path.makeCombining(pathA, pathB, PathOp.INTERSECT);Verfügbare PathOps:
DIFFERENCE: A - BINTERSECT: A & BUNION: A | BXOR: (A | B) - (A & B)REVERSE_DIFFERENCE: B - A
Transformationen & Modifikation
Diese Methoden geben eine neue Path-Instanz mit der angewendeten Transformation zurück.
makeTransform(matrix): Wendet eineMatrix33auf alle Punkte im Pfad an.makeOffset(dx, dy): Verschiebt den Pfad.makeScale(s): Skaliert den Pfad.
Interpolation (Morphing)
Sie können zwischen zwei kompatiblen Pfaden interpolieren (nützlich für Animationen).
// Interpoliere 50% zwischen pathA und pathB
if (pathA.isInterpolatable(pathB)) {
Path midPath = pathA.makeInterpolate(pathB, 0.5f);
}Serialisierung
serializeToBytes(): Serialisiert den Pfad in ein Byte-Array.makeFromBytes(bytes): Rekonstruiert einen Pfad aus Bytes.dump(): Gibt die Pfadstruktur auf die Standardausgabe aus (für Debugging).
Messen und Iteration
PathMeasure: Wird verwendet, um die Länge eines Pfades zu berechnen und Positionen/Tangenten entlang seiner Länge zu finden.PathSegmentIterator: Ermöglicht es, über die einzelnen Verben und Punkte zu iterieren, aus denen der Pfad besteht.
Beispiel
Path path = new Path()
.moveTo(10, 10)
.lineTo(100, 10)
.lineTo(100, 100)
.quadTo(50, 150, 10, 100)
.closePath();
canvas.drawPath(path, paint);Fülltyp
Der Fülltyp bestimmt, welche Bereiche für Fülloperationen als "innen" betrachtet werden.
WINDING(Standard): Verwendet die Windungszahlregel.EVEN_ODD: Verwendet die Even-Odd-Regel.INVERSE_WINDING: Invertiert die Windungsregel (füllt außen).INVERSE_EVEN_ODD: Invertiert die Even-Odd-Regel.
Visuelles Beispiel
Siehe examples/scenes/src/PathsScene.java für Beispiele zum Erstellen, Modifizieren und Kombinieren von Pfaden.