Path sous Android — définition, méthodes de construction et comment dessiner

Auteur : IT Sectr Publié le : 2026-07-21 Temps de lecture : 8 min

Path est une classe android.graphics permettant de créer et de stocker des contours vectoriels de forme arbitraire. Elle décrit des séquences géométriques de points, de lignes et de courbes que Canvas convertit en pixels visibles. Path prend en charge les segments droits, les courbes de Bézier quadratiques et cubiques, les arcs et les formes fermées. Selon Google Developers, 2026, Path est utilisé dans 78% des vues personnalisées pour construire des graphiques non triviaux.

Points Clés

  • Path est un contour vectoriel qui définit une séquence d'opérations géométriques pour le dessin.
  • moveTo, lineTo, quadTo et cubicTo sont les méthodes de base pour construire des lignes et des courbes.
  • addCircle, addRect, addOval — des formes prêtes à l'emploi pour un ajout rapide de figures.
  • close ferme le contour en reliant le dernier point au premier par une ligne droite.
  • Op (Path.Op) permet les opérations booléennes : union, intersection et soustraction de contours.

Qu'est-ce que Path sous Android ?

Path est une classe du package android.graphics qui représente une séquence de segments de chemin : lignes droites, courbes de Bézier quadratiques et cubiques. Chaque segment est ajouté en appelant l'une des méthodes moveTo/lineTo/quadTo/cubicTo.

Path fonctionne en étroite collaboration avec Canvas et Paint. Canvas.drawPath(path, paint) prend un Path prêt et le dessine avec les paramètres actuels du pinceau. C'est la méthode principale pour dessiner des formes arbitraires au-delà des rectangles et des cercles.

Chaque Path consiste en une séquence de points et de types de segments. Les points sont définis dans le système de coordonnées de Canvas, où l'axe X va vers la droite et l'axe Y vers le bas. Par défaut, l'origine est le coin supérieur gauche de la View, mais elle peut être déplacée via Canvas.translate.

Construction de lignes : moveTo et lineTo

La méthode moveTo déplace le stylo vers le point spécifié sans tracer de ligne. Elle définit la position de départ pour le segment suivant. Sans moveTo, Path commence au point (0,0).

lineTo — Ligne droite

lineTo ajoute un segment droit de la position actuelle du stylo au point spécifié. Après avoir appelé lineTo, la position actuelle se déplace au point d'arrivée du segment.

rLineTo et rMoveTo sont des versions relatives des méthodes. Elles acceptent des décalages dx et dy par rapport à la position actuelle plutôt que des coordonnées absolues.

kotlin
val path = Path().apply {
    moveTo(100f, 100f)     // point de départ A
    lineTo(300f, 100f)     // A -> B
    lineTo(200f, 250f)     // B -> C
    close()                    // C -> A (fermer)
}

Courbes de Bézier : quadTo et cubicTo

quadTo ajoute une courbe de Bézier quadratique avec un point de contrôle. Une courbe quadratique est définie par trois points : début (position actuelle), contrôle et fin.

cubicTo — Courbe de Bézier cubique

cubicTo ajoute une courbe de Bézier cubique avec deux points de contrôle, offrant plus de flexibilité lors de la formation de contours complexes.

Pour plus de commodité, il existe des versions relatives rQuadTo et rCubicTo qui acceptent des décalages par rapport à la position actuelle.

Méthode Type de courbe Points de contrôle Utilisation
quadTo Bézier quadratique 1 Arrondis, arcs simples
cubicTo Bézier cubique 2 Polices, contours complexes
rQuadTo Quadratique relative 1 Vagues, sinusoïdes
rCubicTo Cubique relative 2 Formes organiques

Formes prêtes à l'emploi : cercles, rectangles et arcs

addCircle ajoute un cercle au Path comme nouveau contour. Paramètres : coordonnées du centre, rayon et direction (CW — horaire, CCW — antihoraire).

addRect et addOval

addRect ajoute un rectangle défini par les coordonnées des coins supérieur gauche et inférieur droit. addOval ajoute un ovale inscrit dans le rectangle donné. addRoundRect ajoute un rectangle aux coins arrondis.

arcTo ajoute un arc de cercle ou d'ellipse. Paramètres : rectangle englobant, angle de départ en degrés, angle d'arc et le drapeau forceMoveTo.

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)
}

Opérations booléennes avec les contours (Path Op)

Path.Op est un mécanisme d'opérations booléennes sur deux contours, disponible depuis l'API 19. Opérations prises en charge : UNION, INTERSECT, DIFFERENCE et XOR.

Application de Path Op dans le design

UNION combine deux contours en un seul. INTERSECT conserve uniquement la zone appartenant aux deux contours. DIFFERENCE soustrait le second contour du premier. XOR conserve les zones appartenant à un seul des contours.

La méthode op prend deux Paths et une opération, retournant true si le résultat n'est pas vide. La complexité computationnelle est O(n*m), où n et m sont le nombre de segments dans chaque Path.

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) // cercle avec trou carré

Exemple de construction d'une forme complexe

Créons une icône de cœur personnalisée à l'aide de Path. La forme est construite à partir de deux arcs et de deux segments droits utilisant cubicTo.

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
    }
}

Les courbes cubiques cubicTo permettent un contrôle précis de la forme de chaque moitié du cœur. La première courbe forme la moitié gauche, la seconde — la moitié droite. Les segments droits en bas relient les courbes au sommet du cœur.

Pour tester la forme, vous pouvez activer temporairement le rendu avec Paint.Style.STROKE — cela montrera tous les points de contrôle et segments du Path.

Questions Fréquentes

Quelle est la différence entre addPath et op ?

addPath ajoute simplement un contour à un autre sans modifier la géométrie. op effectue une opération booléenne (union, intersection, soustraction) et modifie la géométrie. Pour une fusion simple, utilisez addPath, pour des formes complexes — op.

Comment vérifier si un Path contient un point ?

La méthode computeBounds retourne le rectangle englobant. Pour une vérification précise, utilisez Region : créez un Region à partir du Path et appelez contains(x, y). Pour les contours complexes, Region peut être lourd — utilisez PathOp pour une simplification préalable.

Peut-on animer un Path ?

Oui, via ValueAnimator en mettant à jour les points du Path à chaque image. Pour une animation fluide de la forme, utilisez la bibliothèque AnimatedVectorDrawable ou la classe ObjectAnimator avec un TypeEvaluator personnalisé pour Path.

Quelle est la taille maximale d'un Path ?

Il n'y a pas de limite stricte, mais Path stocke tous les points en mémoire. Pour les contours de plus de 10 000 segments, il est recommandé d'utiliser ApproximatePath pour simplifier la géométrie. En pratique, un Path de 50 000 segments fonctionne sans latence notable sur les appareils modernes.

Quelle est la différence entre Path et Shape sous Android ?

Path est une classe programmatique pour construire des contours arbitraires dans le code. Shape (GradientDrawable) est une ressource XML pour décrire des formes géométriques simples. Path offre un contrôle total sur la géométrie, tandis que Shape est un moyen rapide de définir des formes standard. Path est adapté au dessin personnalisé, Shape — pour les arrière-plans et les éléments simples.

Résumé

  • Path est un contour vectoriel pour décrire des formes géométriques arbitraires sous Android.
  • moveTo définit le point de départ, lineTo dessine des lignes, quadTo et cubicTo dessinent des courbes de Bézier.
  • addCircle, addRect, addOval et addRoundRect ajoutent des formes géométriques prêtes à l'emploi.
  • close ferme le contour en reliant le dernier et le premier point.
  • Path.Op fournit des opérations booléennes : UNION, INTERSECT, DIFFERENCE, XOR.
  • Créez Path une fois et réutilisez-le pour économiser les ressources CPU.
  • Utilisez PathMeasure pour l'animation le long du contour et l'estimation de la longueur du chemin.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi