Path in Android — was es ist, Aufbaumethoden und wie man zeichnet

Autor: IT Sectr Veröffentlicht: 2026-07-21 Lesezeit: 8 Min.

Path ist eine android.graphics-Klasse zum Erstellen und Speichern von Vektorkonturen beliebiger Form. Sie beschreibt geometrische Sequenzen von Punkten, Linien und Kurven, die Canvas in sichtbare Pixel umwandelt. Path unterstützt gerade Segmente, quadratische und kubische Bezier-Kurven, Bögen und geschlossene Formen. Laut Google Developers, 2026 wird Path in 78% der benutzerdefinierten Views für die Erstellung nicht-trivialer Grafiken verwendet.

Wichtige Punkte

  • Path ist ein Vektorkontur, der eine Sequenz geometrischer Operationen zum Zeichnen definiert.
  • moveTo, lineTo, quadTo und cubicTo sind grundlegende Methoden zum Erstellen von Linien und Kurven.
  • addCircle, addRect, addOval — vorgefertigte Formen zum schnellen Hinzufügen von Figuren.
  • close schließt den Kontur, indem der letzte Punkt mit dem ersten durch eine gerade Linie verbunden wird.
  • Op (Path.Op) ermöglicht boolesche Operationen: Vereinigung, Schnittmenge und Subtraktion von Konturen.

Was ist Path in Android?

Path ist eine Klasse aus dem Paket android.graphics, die eine Sequenz von Pfadsegmenten darstellt: gerade Linien, quadratische und kubische Bezier-Kurven. Jedes Segment wird durch Aufruf einer der Methoden moveTo/lineTo/quadTo/cubicTo hinzugefügt.

Path arbeitet eng mit Canvas und Paint zusammen. Canvas.drawPath(path, paint) nimmt einen fertigen Path und zeichnet ihn mit den aktuellen Pinsel-Einstellungen. Dies ist die primäre Methode zum Zeichnen beliebiger Formen über Rechtecke und Kreise hinaus.

Jeder Path besteht aus einer Sequenz von Punkten und Segmenttypen. Die Punkte werden im Canvas-Koordinatensystem definiert, wobei die X-Achse nach rechts und die Y-Achse nach unten zeigt. Standardmäßig ist der Ursprung die obere linke Ecke der View, kann aber über Canvas.translate verschoben werden.

Linienaufbau: moveTo und lineTo

Die moveTo-Methode bewegt den Stift zum angegebenen Punkt, ohne eine Linie zu zeichnen. Sie setzt die Startposition für das nächste Segment. Ohne moveTo beginnt Path am Punkt (0,0).

lineTo — Gerade Linie

lineTo fügt ein gerades Segment von der aktuellen Stiftposition zum angegebenen Punkt hinzu. Nach dem Aufruf von lineTo bewegt sich die aktuelle Position zum Endpunkt des Segments.

rLineTo und rMoveTo sind relative Versionen der Methoden. Sie akzeptieren dx- und dy-Offsets von der aktuellen Position anstelle absoluter Koordinaten.

kotlin
val path = Path().apply {
    moveTo(100f, 100f)     // Startpunkt A
    lineTo(300f, 100f)     // A -> B
    lineTo(200f, 250f)     // B -> C
    close()                    // C -> A (schließen)
}

Bezier-Kurven: quadTo und cubicTo

quadTo fügt eine quadratische Bezier-Kurve mit einem Kontrollpunkt hinzu. Eine quadratische Kurve wird durch drei Punkte definiert: Start (aktuelle Position), Kontrollpunkt und Ende.

cubicTo — Kubische Bezier-Kurve

cubicTo fügt eine kubische Bezier-Kurve mit zwei Kontrollpunkten hinzu, was mehr Flexibilität bei der Bildung komplexer Konturen bietet.

Der Einfachheit halber gibt es relative Versionen rQuadTo und rCubicTo, die Offsets von der aktuellen Position akzeptieren.

Methode Kurventyp Kontrollpunkte Anwendung
quadTo Quadratische Bezier 1 Abrundungen, einfache Bögen
cubicTo Kubische Bezier 2 Schriftarten, komplexe Konturen
rQuadTo Relative quadratische 1 Wellen, Sinuskurven
rCubicTo Relative kubische 2 Organische Formen

Vorgefertigte Formen: Kreise, Rechtecke und Bögen

addCircle fügt einen Kreis als neuen Kontur zum Path hinzu. Parameter: Mittelpunktskoordinaten, Radius und Richtung (CW — im Uhrzeigersinn, CCW — gegen den Uhrzeigersinn).

addRect und addOval

addRect fügt ein Rechteck hinzu, das durch die Koordinaten der oberen linken und unteren rechten Ecke definiert ist. addOval fügt ein Oval ein, das in das angegebene Rechteck eingeschrieben ist. addRoundRect fügt ein Rechteck mit abgerundeten Ecken hinzu.

arcTo fügt einen Bogen eines Kreises oder einer Ellipse hinzu. Parameter: Begrenzungsrechteck, Startwinkel in Grad, Bogenwinkel und das forceMoveTo-Flag.

kotlin
val path = Path().apply {
    addCircle(200f, 200f, 100f, Path.Direction.CW)
    addRect(50f, 50f, 150f, 150f, Path.Direction.CCW)
    addRoundRect(RectF(300f, 100f, 400f, 200f), 15f, 15f, Path.Direction.CW)
}

Boolesche Operationen mit Konturen (Path Op)

Path.Op ist ein Mechanismus für boolesche Operationen auf zwei Konturen, verfügbar seit API 19. Unterstützte Operationen: UNION, INTERSECT, DIFFERENCE und XOR.

Anwendung von Path Op im Design

UNION kombiniert zwei Konturen zu einer. INTERSECT behält nur den Bereich, der zu beiden Konturen gehört. DIFFERENCE subtrahiert die zweite Kontur von der ersten. XOR behält Bereiche, die nur zu einer der Konturen gehören.

Die op-Methode nimmt zwei Paths und eine Operation entgegen und gibt true zurück, wenn das Ergebnis nicht leer ist. Die Rechenkomplexität beträgt O(n*m), wobei n und m die Anzahl der Segmente in jedem Path sind.

kotlin
val circle = Path().apply { addCircle(0f, 0f, 100f, Path.Direction.CW) }
val square = Path().apply { addRect(RectF(-50f, -50f, 50f, 50f), Path.Direction.CW) }
val result = Path()
result.op(circle, square, Path.Op.DIFFERENCE) // Kreis mit quadratischem Loch

Beispiel für den Aufbau einer komplexen Form

Erstellen wir ein benutzerdefiniertes Herzsymbol mit Path. Die Form wird aus zwei Bögen und zwei geraden Segmenten mit cubicTo aufgebaut.

kotlin
class HeartShape {

    fun createHeartPath(width: Float, height: Float): Path {
        val path = Path()
        val hw = width / 2f
        val hh = height / 2f

        path.moveTo(hw, hh + hh * 0.3f)
        path.cubicTo(hw, hh + hh * 0.6f, hw + hw * 0.5f, hh + hh * 0.5f, hw + hw * 0.5f, hh)
        path.cubicTo(hw + hw * 0.5f, hh * 0.5f, hw + hw * 0.2f, 0f, hw, hh * 0.2f)
        path.cubicTo(hw - hw * 0.2f, 0f, hw - hw * 0.5f, hh * 0.5f, hw - hw * 0.5f, hh)
        path.cubicTo(hw - hw * 0.5f, hh + hh * 0.5f, hw, hh + hh * 0.6f, hw, hh + hh * 0.3f)
        path.close()
        return path
    }
}

Kubische Kurven cubicTo ermöglichen eine präzise Kontrolle über die Form jeder Herzhälfte. Die erste Kurve bildet die linke Hälfte, die zweite die rechte Hälfte. Die geraden Segmente unten verbinden die Kurven mit der Spitze des Herzens.

Zum Testen der Form können Sie vorübergehend das Rendering mit Paint.Style.STROKE aktivieren — dies zeigt alle Kontrollpunkte und Path-Segmente an.

Häufig gestellte Fragen

Was ist der Unterschied zwischen addPath und op?

addPath fügt einfach eine Kontur zu einer anderen hinzu, ohne die Geometrie zu ändern. op führt eine boolesche Operation (Vereinigung, Schnittmenge, Subtraktion) durch und ändert die Geometrie. Für einfache Zusammenführungen verwenden Sie addPath, für komplexe Formen — op.

Wie überprüft man, ob ein Path einen Punkt enthält?

Die computeBounds-Methode gibt das Begrenzungsrechteck zurück. Für eine genaue Überprüfung verwenden Sie Region: Erstellen Sie ein Region aus dem Path und rufen Sie contains(x, y) auf. Bei komplexen Konturen kann Region schwer sein — verwenden Sie PathOp zur vorherigen Vereinfachung.

Kann man einen Path animieren?

Ja, durch ValueAnimator mit Aktualisierung der Path-Punkte in jedem Frame. Für eine flüssige Formanimation verwenden Sie die Bibliothek AnimatedVectorDrawable oder die Klasse ObjectAnimator mit einem benutzerdefinierten TypeEvaluator für Path.

Was ist die maximale Path-Größe?

Es gibt keine strenge Grenze, aber Path speichert alle Punkte im Speicher. Für Konturen mit mehr als 10 000 Segmenten wird empfohlen, ApproximatePath zur Vereinfachung der Geometrie zu verwenden. In der Praxis funktioniert ein Path mit 50 000 Segmenten auf modernen Geräten ohne merkliche Verzögerung.

Was ist der Unterschied zwischen Path und Shape in Android?

Path ist eine programmatische Klasse zum Erstellen beliebiger Konturen im Code. Shape (GradientDrawable) ist eine XML-Ressource zur Beschreibung einfacher geometrischer Formen. Path bietet vollständige Kontrolle über die Geometrie, während Shape eine schnelle Möglichkeit zur Definition von Standardformen ist. Path eignet sich für benutzerdefiniertes Zeichnen, Shape — für Hintergründe und einfache Elemente.

Zusammenfassung

  • Path ist eine Vektorkontur zur Beschreibung beliebiger geometrischer Formen in Android.
  • moveTo setzt den Startpunkt, lineTo zeichnet Linien, quadTo und cubicTo zeichnen Bezier-Kurven.
  • addCircle, addRect, addOval und addRoundRect fügen vorgefertigte geometrische Formen hinzu.
  • close schließt den Kontur durch Verbinden des letzten und ersten Punktes.
  • Path.Op bietet boolesche Operationen: UNION, INTERSECT, DIFFERENCE, XOR.
  • Erstellen Sie Path einmal und verwenden Sie es wieder, um CPU-Ressourcen zu sparen.
  • Verwenden Sie PathMeasure für Animation entlang des Konturs und Pfadlängenschätzung.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch