Android'de Path — nedir, oluşturma yöntemleri ve nasıl çizilir

Yazar: IT Sectr Yayınlanma: 2026-07-21 Okuma süresi: 8 dk

Path, isteğe bağlı şekilde vektör konturları oluşturmak ve depolamak için bir android.graphics sınıfıdır. Canvas'ın görünür piksellere dönüştürdüğü noktaların, çizgilerin ve eğrilerin geometrik dizilerini tanımlar. Path, düz segmentleri, ikinci ve üçüncü derece Bezier eğrilerini, yayları ve kapalı şekilleri destekler. Google Developers, 2026'ya göre, Path, önemsiz olmayan grafikler oluşturmak için özel View'lerin %78'inde kullanılır.

Önemli Noktalar

  • Path, çizim için geometrik işlemler dizisini tanımlayan bir vektör konturudur.
  • moveTo, lineTo, quadTo ve cubicTo, çizgi ve eğriler oluşturmak için temel yöntemlerdir.
  • addCircle, addRect, addOval — hızlı şekil eklemek için hazır formlar.
  • close, son noktayı ilk noktaya düz bir çizgiyle bağlayarak konturu kapatır.
  • Op (Path.Op) boolean işlemlerine izin verir: birleşim, kesişim ve kontur çıkarma.

Android'de Path Nedir?

Path, android.graphics paketinden bir sınıftır ve düz çizgiler, ikinci ve üçüncü derece Bezier eğrilerinden oluşan bir yol segmentleri dizisini temsil eder. Her segment, moveTo/lineTo/quadTo/cubicTo yöntemlerinden biri çağrılarak eklenir.

Path, Canvas ve Paint ile yakın bir şekilde çalışır. Canvas.drawPath(path, paint) hazır bir Path alır ve onu mevcut fırça ayarlarıyla çizer. Bu, dikdörtgenler ve dairelerin ötesinde isteğe bağlı şekiller çizmenin birincil yoludur.

Her Path, bir nokta ve segment türleri dizisinden oluşur. Noktalar, X ekseninin sağa ve Y ekseninin aşağıya gittiği Canvas koordinat sisteminde tanımlanır. Varsayılan olarak, orijin View'ın sol üst köşesidir, ancak Canvas.translate ile kaydırılabilir.

Çizgi Oluşturma: moveTo ve lineTo

moveTo yöntemi, çizgi çizmeden kalemi belirtilen noktaya taşır. Bir sonraki segment için başlangıç konumunu ayarlar. moveTo olmadan Path, (0,0) noktasından başlar.

lineTo — Düz Çizgi

lineTo, mevcut kalem konumundan belirtilen noktaya kadar düz bir segment ekler. lineTo çağrıldıktan sonra, mevcut konum segmentin bitiş noktasına taşınır.

rLineTo ve rMoveTo, yöntemlerin göreceli sürümleridir. Mutlak koordinatlar yerine mevcut konumdan dx ve dy ofsetlerini kabul ederler.

kotlin
val path = Path().apply {
    moveTo(100f, 100f)     // başlangıç noktası A
    lineTo(300f, 100f)     // A -> B
    lineTo(200f, 250f)     // B -> C
    close()                    // C -> A (kapat)
}

Bezier Eğrileri: quadTo ve cubicTo

quadTo, bir kontrol noktasıyla ikinci derece bir Bezier eğrisi ekler. İkinci derece bir eğri üç nokta tarafından tanımlanır: başlangıç (mevcut konum), kontrol ve bitiş.

cubicTo — Üçüncü Derece Bezier Eğrisi

cubicTo, iki kontrol noktasıyla üçüncü derece bir Bezier eğrisi ekler ve karmaşık konturlar oluştururken daha fazla esneklik sağlar.

Kolaylık için, mevcut konumdan ofsetleri kabul eden göreceli sürümler rQuadTo ve rCubicTo bulunur.

Yöntem Eğri Türü Kontrol Noktası Kullanım
quadTo İkinci Derece Bezier 1 Yuvarlamalar, basit yaylar
cubicTo Üçüncü Derece Bezier 2 Yazı tipleri, karmaşık konturlar
rQuadTo Göreceli ikinci derece 1 Dalgalar, sinüzoidler
rCubicTo Göreceli üçüncü derece 2 Organik şekiller

Hazır Şekiller: Daireler, Dikdörtgenler ve Yaylar

addCircle, Path'e yeni bir kontur olarak bir daire ekler. Parametreler: merkez koordinatları, yarıçap ve yön (CW — saat yönünde, CCW — saat yönünün tersine).

addRect ve addOval

addRect, sol üst ve sağ alt köşelerin koordinatlarıyla tanımlanan bir dikdörtgen ekler. addOval, verilen dikdörtgenin içine çizilmiş bir oval ekler. addRoundRect, yuvarlak köşeli bir dikdörtgen ekler.

arcTo, bir daire veya elips yayı ekler. Parametreler: sınırlayıcı dikdörtgen, derece cinsinden başlangıç açısı, yay açısı ve forceMoveTo bayrağı.

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

Konturlarla Boolean İşlemleri (Path Op)

Path.Op, iki kontur üzerinde boolean işlemleri için bir mekanizmadır ve API 19'dan itibaren kullanılabilir. Desteklenen işlemler: UNION, INTERSECT, DIFFERENCE ve XOR.

Tasarımda Path Op Uygulaması

UNION iki konturu birleştirir. INTERSECT yalnızca her iki kontura ait alanı korur. DIFFERENCE ikinci konturu birinciden çıkarır. XOR yalnızca bir kontura ait alanları korur.

op yöntemi iki Path ve bir işlem alır, sonuç boş değilse true döndürür. Hesaplama karmaşıklığı O(n*m)'dir, burada n ve m her Path'deki segment sayısıdır.

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) // kare delikli daire

Karmaşık Şekil Oluşturma Örneği

Path kullanarak özel bir kalp simgesi oluşturalım. Şekil, cubicTo kullanılarak iki yay ve iki düz segmentten oluşturulur.

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

Üçüncü derece eğriler cubicTo, kalbin her yarısının şekli üzerinde hassas kontrol sağlar. İlk eğri sol yarıyı, ikincisi sağ yarıyı oluşturur. Alttaki düz segmentler eğrileri kalbin tepesine bağlar.

Şekli test etmek için geçici olarak Paint.Style.STROKE ile işlemeyi etkinleştirebilirsiniz — bu, tüm kontrol noktalarını ve Path segmentlerini gösterecektir.

Sıkça Sorulan Sorular

addPath ve op arasındaki fark nedir?

addPath geometriyi değiştirmeden bir konturu diğerine ekler. op bir boolean işlemi (birleşim, kesişim, çıkarma) gerçekleştirir ve geometriyi değiştirir. Basit birleştirme için addPath, karmaşık şekiller için op kullanın.

Bir Path'in bir nokta içerip içermediği nasıl kontrol edilir?

computeBounds yöntemi sınırlayıcı dikdörtgeni döndürür. Kesin kontrol için Region kullanın: Path'ten bir Region oluşturun ve contains(x, y) çağrısı yapın. Karmaşık konturlar için Region ağır olabilir — önceden basitleştirme için PathOp kullanın.

Path canlandırılabilir mi?

Evet, her karede Path noktalarını güncelleyerek ValueAnimator aracılığıyla. Pürüzsüz şekil animasyonu için AnimatedVectorDrawable kütüphanesini veya Path için özel TypeEvaluator ile ObjectAnimator sınıfını kullanın.

Maksimum Path boyutu nedir?

Katı bir sınır yoktur, ancak Path tüm noktaları bellekte saklar. 10 000'den fazla segmente sahip konturlar için geometriyi basitleştirmek amacıyla ApproximatePath kullanılması önerilir. Pratikte, 50 000 segmentli bir Path modern cihazlarda fark edilir gecikme olmadan çalışır.

Android'de Path ve Shape arasındaki fark nedir?

Path, kodda isteğe bağlı konturlar oluşturmak için programlı bir sınıftır. Shape (GradientDrawable), basit geometrik şekilleri tanımlamak için bir XML kaynağıdır. Path geometri üzerinde tam kontrol sağlarken, Shape standart şekilleri tanımlamanın hızlı bir yoludur. Path özel çizim için uygundur, Shape — arka planlar ve basit öğeler için.

Özet

  • Path, Android'de isteğe bağlı geometrik şekilleri tanımlamak için bir vektör konturudur.
  • moveTo başlangıç noktasını ayarlar, lineTo çizgiler çizer, quadTo ve cubicTo Bezier eğrileri çizer.
  • addCircle, addRect, addOval ve addRoundRect hazır geometrik şekiller ekler.
  • close son ve ilk noktayı birleştirerek konturu kapatır.
  • Path.Op boolean işlemleri sağlar: UNION, INTERSECT, DIFFERENCE, XOR.
  • Path'i bir kez oluşturun ve CPU kaynaklarından tasarruf etmek için yeniden kullanın.
  • Kontur boyunca animasyon ve yol uzunluğu tahmini için PathMeasure kullanın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun