Vector Drawable, XML tabanlı ve kalite kaybı olmadan ölçeklenebilir görüntüler oluşturmaya olanak tanıyan Android için bir vektör grafik formatıdır. PNG ve JPEG’in aksine, vektör geometrik konturları ve dolguları metin talimatları olarak depolayarak minimum dosya boyutu ve herhangi bir ekran yoğunluğuna uyum sağlar. Android Developers belgelerine (2026) göre, Vector Drawable farklı çözünürlükler için raster kaynakları setine kıyasla APK boyutunu ortalama %40–60 oranında azaltır.
Önemli Noktalar
Vector Drawable, SVG (Scalable Vector Graphics) spesifikasyonuna dayalı olarak XML formatında bir vektör görüntüsünü temsil eden bir Android kaynağıdır. Google bu formatı Android 5.0 (API 21)’de simgeler, illüstrasyonlar ve diğer grafiksel UI öğeleri için raster görüntülere alternatif olarak tanıttı.
Görüntünün sabit boyutlu bir piksel dizisi olarak depolandığı PNG’nin aksine, Vector Drawable şekilleri matematiksel olarak tanımlar — nokta koordinatları, Bezier eğrileri, dolgular ve konturlar aracılığıyla. Bu, tek bir vektör görüntüsünün farklı ekran yoğunlukları (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi, nodpi) için altı adede kadar PNG dosyasını değiştirebileceği ve grafik kaynak bakımını çarpıcı şekilde basitleştirebileceği anlamına gelir.
Format yalnızca statik görüntüleri değil, aynı zamanda AnimatedVectorDrawable aracılığıyla animasyonun yanı sıra tema öznitelikleri aracılığıyla koyu tema uyumu ve özel renkleri de destekler. Android 7.0 (API 24)’ten itibaren Vector Drawable ayrıca gradyan dolguları ve karmaşık kırpma işlemlerini (clipPath) de destekleyerek tasarım olanaklarını genişletir.
Her Vector Drawable, genişlik, yükseklik ve viewport (şekillerin çizildiği sanal bir koordinat sistemi) parametrelerine sahip bir kök vector öğesi içerir. İçinde gruplar (group) ve yollar (path) bulunur; path, bir dizi komut aracılığıyla geometriyi tanımlar: M (moveTo), L (lineTo), C (cubicTo), Z (close) ve diğerleri. Her path kendi fillColor ve strokeColor değerine sahip olabilir ve bunlar tema kaynaklarına başvurabilir.
Ek öğeler arasında kırpma için clip-path, gradyan geçişleri için gradient ve android:theme özniteliği aracılığıyla koyu tema uyum öznitelikleri bulunur. Vector Drawable’daki tüm renkler, tema özniteliklerine (rneğin, ?attr/colorPrimary) referans olarak belirtilebilir ve bu, kaynakları kopyalamadan temalar arasında geçiş yaparken simge görünümünü değiştirir.
Vector Drawable XML dosyası res/drawable/ dizinine yerleştirilir ve kök
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@color/ic_launcher_background"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2z"
android:strokeWidth="1"
android:strokeColor="#333333"/>
</vector>
Örnekte, 24×24 viewport’ta yarıçapı 10 birim olan bir daire tanımlanmıştır. fillColor parametresi bir renk kaynağına başvururken, strokeWidth ve strokeColor konturu tanımlar. Genişlik ve yükseklik dp cinsinden belirtilir — bu, ek dönüşümlere gerek kalmadan farklı piksel yoğunluklarındaki ekranlarda doğru ölçeklendirmeyi sağlar.
group öğesi, birden çok yolu gruplamaya ve bunlara ortak dönüşümler uygulamaya olanak tanır: döndürme (rotation), öteleme (translateX, translateY) ve ölçekleme (scaleX, scaleY). Gruplar iç içe olabilir ve performans kaybı olmadan yüzlerce öğeden oluşan karmaşık hiyerarşiler oluşturmayı sağlar.
<vector ...>
<group android:name="arrow_group"
android:pivotX="12"
android:pivotY="12"
android:rotation="90">
<path .../>
</group>
</vector>
pivotX/pivotY özniteliğiyle gruplama animasyon için kullanılır: görüntünün bir kısmını diğer öğelerden bağımsız olarak döndürebilir veya ölçekleyebilirsiniz; bu, özellikle animasyonlu durum simgeleri (rneğin, yükleniyor → başarı) oluşturmak için kullanışlıdır.
Vektör ve raster grafikler arasındaki seçim kullanım durumuna bağlıdır. Vector Drawable, az ayrıntıya sahip simgeler, illüstrasyonlar ve UI öğeleri için idealdir; binlerce renge sahip fotoğraflar ve karmaşık görüntüler ise raster formatlarda kalır.
| Parametre | Vector Drawable | PNG |
|---|---|---|
| Ölçekleme | Kalite kaybı olmadan | Büyütünce kayıp |
| Dosya boyutu | 0.5–5 KB | Çözünürlük başına 10–100 KB |
| Dosya sayısı | 1 XML | 6 PNG (mdpi–xxxhdpi) |
| Animasyon | Desteklenir | Sadece kare değiştirme |
| Tema uyumu | ?attr aracılığıyla | Ayrı setler |
| Karmaşık sahneler | Sınırlı | Herhangi biri |
Android Performance Patterns’e (Google I/O 2016) göre, PNG simgelerini Vector Drawable ile değiştirmek, çok sayıda grafik kaynağı olan uygulamalar için APK boyutunu %40–60 oranında azaltır. Ancak, yüzlerce yola sahip karmaşık vektörleri işlerken CPU yükü artar, bu nedenle animasyonlar ve sık yeniden çizimler için önceden önbelleğe alınmış rasterlerin kullanılması önerilir.
Vector Drawable, arayüz simgeleri (araç çubuğu, navigasyon, durumlar), logolar, basit illüstrasyonlar ve animasyonlu öğeler için idealdir. Format, birden çok ekranı desteklerken özellikle avantajlıdır: altı yoğunluk için PNG üretmek yerine tek bir XML dosyası yeterlidir. Bu, tasarım bakımını basitleştirir ve boyut uyumsuzluğu hatalarını ortadan kaldırır. Fotoğraflar ve fotogerçekçi gradyan görüntüleri için WebP sıkıştırmalı raster formatlar hala kullanılmaktadır.
Android, Vector Drawable animasyonunu iki mekanizma aracılığıyla destekler: AnimatedVectorDrawable (API 21’den itibaren kullanılabilir) ve AnimatedStateListDrawable. İlki, yol özniteliklerini (döndürme, öteleme, renk değiştirme ve şekil dönüşümü) canlandırmaya olanak tanır. İkincisi, farklı durumlar (basma, vurgulama) arasında yumuşak geçişlerle geçiş yapar.
AnimatedVectorDrawable üç XML dosyası kullanır: Vector Drawable’ın kendisi, animasyonu tanımlayan bir ObjectAnimator ve hedefi (grup veya yol adı) animatöre bağlayan bir bağlayıcı AnimatedVectorDrawable. Animasyon, fillColor, strokeColor, rotation, translateX/Y, scaleX/Y ve hatta pathData’yı (bir şekli diğerine yumuşak bir şekilde dönüştürme — morphing) değiştirebilir.
Artı simgesinin kapat simgesine dönüştüğü bir animasyon düşünelim. Ana sınırlama: başlangıç ve bitiş durumundaki pathData komutlarının sayısı eşleşmelidir, aksi takdirde animasyon çalışmaz.
<!-- res/drawable/anim_plus_to_close.xml -->
<animated-vector xmlns:android="...">
<target
android:name="plus_path"
android:animation="@anim/plus_to_close"/>
</animated-vector>
ObjectAnimator plus_to_close, 300 milisaniye içinde pathData özelliğini orijinal artı şeklinden kapat şekline değiştirir. Sistem, iki SVG yolu komut kümesi arasındaki koordinatları otomatik olarak enterpole eder. Bu tür animasyon, Material Design’da düğme ve simge durumu geçişlerinde yaygın olarak kullanılır.
Koyu tema desteği olan bir geri ok simgesi için tam XML vektör örneğine bakalım. Renk, bir tema özniteliğine referansla ayarlanır ve kaynakları kopyalamadan açık ve koyu temalar arasında geçiş yaparken simge rengini otomatik olarak değiştirir.
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<group android:name="arrow">
<path
android:fillColor="@android:color/white"
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
</group>
</vector>
android:tint parametresi ?attr/colorControlNormal değeriyle sistem kontrol rengini otomatik olarak uygular — açık temada koyu gri, koyu temada beyaz. Arrow adlı grup, bu simgeyi AnimatedVectorDrawable aracılığıyla canlandırmaya olanak tanır.
Android’de programlı olarak bir Vector Drawable yüklemek için AppCompatResources.getDrawable() sınıfını veya ContextCompat.getDrawable() yöntemini kullanın. Modern Jetpack Compose projelerinde, raster ve vektör Drawable’lar, kaynak formatını otomatik olarak belirleyen painterResource aracılığıyla yüklenir.
import androidx.appcompat.content.res.AppCompatResources
val vectorDrawable = AppCompatResources.getDrawable(
context,
R.drawable.ic_arrow_back
)
// Jetpack Compose
Icon(
painter = painterResource(R.drawable.ic_arrow_back),
contentDescription = "Back",
tint = MaterialTheme.colorScheme.onSurface
)
AppCompatResources.getDrawable() kullanırken, AppCompat kitaplığı API seviyesine göre otomatik olarak doğru drawable sürümünü seçer: Android 5.0 (API 21) öncesi cihazlarda bir raster yedek kullanılabilir; daha yeni cihazlarda Vector Drawable kullanılır. Jetpack Compose’da painterResource bu uyumluluğu otomatik olarak yönetir.
Sıkça Sorulan Sorular
Vector Drawable, Android 5.0 (API 21)’den itibaren yerel olarak desteklenir. Eski sürümler için AppCompat kitaplığını kullanmak gerekir (vektör kaynakları API 7+ olan cihazlarda onun üzerinden çalışır). build.gradle’da vectorDrawables.useSupportLibrary = true bayrağı da gereklidir.
Evet, Jetpack Compose painterResource() işlevi aracılığıyla Vector Drawable’ı destekler. Icon bileşeni, res/drawable/ klasöründen vektör kaynağını otomatik olarak yükler ve renklendirme için Material temasını uygular. Vektörler, modifier parametresiyle belirtilen herhangi bir boyuta kalite kaybı olmadan ölçeklenir.
SVG, zengin bir özellik setine (filtreler, maskeler, gömülü stiller) sahip evrensel bir web standardıdır. Vector Drawable, sınırlı bir SVG komut alt kümesiyle Android için uyarlanmış bir sürümdür. Android, SVG’yi doğrudan desteklemez, yalnızca Android Studio Asset Studio aracılığıyla SVG’den oluşturulan Vector Drawable’ı destekler.
En kolay yol Android Studio’yu kullanmaktır: drawable klasörüne sağ tıklayın → New → Vector Asset → Import local SVG file. Studio, SVG’yi otomatik olarak optimize eder ve XML Vector Drawable oluşturur. Diğer bir seçenek, animasyonla dışa aktarmayı destekleyen SVG2VectorDrawable veya ShapeShifter gibi çevrimiçi dönüştürücüleri kullanmaktır.
Sorun genellikle AppCompat desteğinin eksikliğiyle ilgilidir. build.gradle dosyasında vectorDrawables.useSupportLibrary = true bayrağının ayarlandığından ve AppCompatDelegate’in kullanıldığından emin olun. Ayrıca Vector Drawable’ın kullanılan AppCompat kitaplığı sürümünde bulunmayan özellikler içermediğini kontrol edin.
Özet
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.
Ayrıca okuyun