Vector Drawable adalah format grafik vektor untuk Android berbasis XML yang memungkinkan pembuatan gambar berskala tanpa kehilangan kualitas. Tidak seperti PNG dan JPEG, vektor menyimpan kontur geometris dan isian dalam bentuk instruksi teks, yang memberikan ukuran file minimal dan adaptasi ke setiap kerapatan layar. Menurut dokumentasi Android Developers (2026), Vector Drawable mengurangi ukuran APK rata-rata 40–60% dibandingkan dengan kumpulan sumber daya raster untuk resolusi yang berbeda.
Poin Utama
Vector Drawable adalah sumber daya Android yang merepresentasikan gambar vektor dalam format XML, berdasarkan spesifikasi SVG (Scalable Vector Graphics). Google memperkenalkan format ini di Android 5.0 (API 21) sebagai alternatif gambar raster untuk ikon, ilustrasi, dan elemen grafis antarmuka lainnya.
Tidak seperti PNG, di mana gambar disimpan sebagai kumpulan piksel berukuran tetap, Vector Drawable mendeskripsikan bentuk secara matematis — melalui koordinat titik, kurva Bezier, isian, dan kontur. Ini berarti satu gambar vektor dapat menggantikan hingga enam file PNG untuk kerapatan layar yang berbeda (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi, nodpi), yang secara radikal menyederhanakan pemeliharaan sumber daya grafis.
Format ini tidak hanya mendukung gambar statis, tetapi juga animasi melalui AnimatedVectorDrawable, serta adaptasi tema gelap dan warna kustom melalui atribut tema. Mulai Android 7.0 (API 24), Vector Drawable juga mendukung isian gradien dan operasi pemotongan kompleks (clipPath), yang memperluas kemungkinan desain.
Setiap Vector Drawable berisi elemen root vector dengan parameter lebar, tinggi, dan viewport — sistem koordinat virtual tempat bentuk digambar. Di dalamnya terdapat grup (group) dan jalur (path), di mana path mendefinisikan geometri melalui urutan perintah: M (moveTo), L (lineTo), C (cubicTo), Z (close), dan lainnya. Setiap path dapat memiliki isian (fillColor) dan kontur (strokeColor) sendiri, yang dapat merujuk ke sumber daya tema.
Elemen tambahan termasuk clip-path untuk pemotongan, gradient untuk transisi gradien, dan atribut adaptasi tema gelap melalui atribut android:theme. Semua warna di Vector Drawable dapat ditentukan sebagai referensi ke atribut tema (misalnya, ?attr/colorPrimary), yang mengubah tampilan ikon saat mengganti tema tanpa menduplikasi sumber daya.
File XML Vector Drawable ditempatkan di direktori res/drawable/ dan memiliki elemen root <vector>. Di dalamnya bisa ada <group> bersarang untuk organisasi hierarki dan <path> untuk mendeskripsikan kontur. Setiap path berisi atribut pathData — string perintah menggambar dalam format jalur SVG.
<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>
Dalam contoh, digambarkan lingkaran dengan radius 10 unit dalam viewport 24×24. Parameter fillColor merujuk ke sumber daya warna, sedangkan strokeWidth dan strokeColor menentukan kontur. Ukuran width dan height ditentukan dalam dp — ini memastikan penskalaan yang benar pada layar dengan kerapatan piksel berbeda tanpa transformasi tambahan.
Elemen group memungkinkan pengelompokan beberapa path dan penerapan transformasi bersama: rotasi (rotation), pergeseran (translateX, translateY), dan penskalaan (scaleX, scaleY). Grup dapat bersarang, memungkinkan pembuatan hierarki kompleks dari ratusan elemen tanpa kehilangan kinerja.
<vector ...>
<group android:name="arrow_group"
android:pivotX="12"
android:pivotY="12"
android:rotation="90">
<path .../>
</group>
</vector>
Pengelompokan dengan atribut pivotX/pivotY digunakan untuk animasi: bagian gambar dapat diputar atau diskalakan secara independen dari elemen lain, yang sangat berguna untuk membuat ikon status animasi (misalnya, memuat → berhasil).
Pilihan antara grafik vektor dan raster tergantung pada skenario penggunaan. Vector Drawable ideal untuk ikon, ilustrasi, dan elemen antarmuka dengan sedikit detail, sementara foto dan gambar kompleks dengan ribuan warna tetap dalam format raster.
| Parameter | Vector Drawable | PNG |
|---|---|---|
| Penskalaan | Tanpa kehilangan kualitas | Hilang saat diperbesar |
| Ukuran file | 0.5–5 KB | 10–100 KB per resolusi |
| Jumlah file | 1 XML | 6 PNG (mdpi–xxxhdpi) |
| Animasi | Didukung | Hanya pergantian bingkai |
| Adaptasi tema | Melalui ?attr | Set terpisah |
| Adegan kompleks | Terbatas | Semua |
Menurut Android Performance Patterns (Google I/O 2016), mengganti ikon PNG dengan Vector Drawable mengurangi ukuran APK sebesar 40–60% untuk aplikasi dengan banyak sumber daya grafis. Namun, saat merender vektor kompleks dengan ratusan path, beban CPU meningkat, sehingga untuk animasi dan penggambaran ulang yang sering, disarankan menggunakan raster yang di-cache.
Vector Drawable optimal untuk ikon antarmuka (toolbar, navigasi, status), logo, ilustrasi sederhana, dan elemen animasi. Format ini sangat menguntungkan saat mendukung banyak layar: alih-alih menghasilkan PNG untuk enam kerapatan, satu file XML sudah cukup. Ini menyederhanakan pemeliharaan desain dan menghilangkan kesalahan ketidakcocokan ukuran. Untuk foto dan gambar dengan gradien fotorealistik, format raster dengan kompresi WebP masih digunakan.
Android mendukung animasi Vector Drawable melalui dua mekanisme: AnimatedVectorDrawable (tersedia sejak API 21) dan AnimatedStateListDrawable. Yang pertama memungkinkan animasi atribut path — rotasi, pergeseran, perubahan warna dan bentuk. Yang kedua beralih antara status yang berbeda (tekan, pilih) dengan transisi yang halus.
AnimatedVectorDrawable menggunakan tiga file XML: Vector Drawable itu sendiri, ObjectAnimator dengan deskripsi animasi, dan AnimatedVectorDrawable penghubung yang menghubungkan target (nama grup atau jalur) dengan animator. Animasi dapat mengubah fillColor, strokeColor, rotation, translateX/Y, scaleX/Y, dan bahkan pathData — yaitu mengubah satu bentuk menjadi bentuk lain secara halus (morphing).
Mari kita lihat animasi di mana ikon “tambah” berubah menjadi “silang”. Batasan utama: jumlah perintah pathData harus sama di status awal dan akhir, jika tidak animasi tidak akan berfungsi.
<!-- res/drawable/anim_plus_to_close.xml -->
<animated-vector xmlns:android="...">
<target
android:name="plus_path"
android:animation="@anim/plus_to_close"/>
</animated-vector>
Animasi ObjectAnimator plus_to_close mengubah properti pathData dari bentuk awal “tambah” ke bentuk “silang” dalam 300 milidetik. Sistem secara otomatis menginterpolasi koordinat antara dua set perintah jalur SVG. Animasi semacam ini banyak digunakan di Material Design untuk transisi status tombol dan ikon yang halus.
Mari kita lihat contoh lengkap vektor XML untuk ikon panah kembali dengan dukungan tema gelap. Warna ditentukan melalui referensi ke atribut tema, yang secara otomatis mengubah warna ikon saat beralih antara tema terang dan gelap tanpa menduplikasi sumber daya.
<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>
Parameter android:tint dengan nilai ?attr/colorControlNormal secara otomatis menerapkan warna sistem elemen kontrol — pada tema terang ini abu-abu gelap, pada tema gelap putih. Grup bernama arrow memungkinkan animasi ikon ini melalui AnimatedVectorDrawable.
Untuk memuat Vector Drawable secara terprogram di Android, gunakan kelas AppCompatResources.getDrawable() atau metode ContextCompat.getDrawable(). Dalam proyek modern di Jetpack Compose, Drawable raster dan vektor dimuat melalui painterResource, yang secara otomatis mendeteksi format sumber daya.
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
)
Saat menggunakan AppCompatResources.getDrawable(), pustaka AppCompat secara otomatis memilih versi drawable yang tepat berdasarkan level API: pada perangkat yang lebih lama dari Android 5.0 (API 21) dapat menggunakan fallback raster, pada yang lebih baru — Vector Drawable. Di Jetpack Compose, painterResource menangani kompatibilitas ini secara otomatis.
Pertanyaan yang Sering Diajukan
Vector Drawable didukung secara native sejak Android 5.0 (API 21). Untuk versi yang lebih lama, perlu menggunakan pustaka AppCompat (sumber daya vektor berfungsi melaluinya pada perangkat dengan API 7+). Juga diperlukan flag vectorDrawables.useSupportLibrary = true di build.gradle.
Ya, Jetpack Compose mendukung Vector Drawable melalui fungsi painterResource(). Komponen Icon secara otomatis memuat sumber daya vektor dari res/drawable/ dan menerapkan tema Material untuk tint. Vektor meregang tanpa kehilangan kualitas ke ukuran berapa pun yang ditentukan melalui parameter modifier.
SVG adalah standar web universal dengan kumpulan fitur yang kaya (filter, mask, gaya bawaan). Vector Drawable adalah versi yang diadaptasi untuk Android dengan subset perintah SVG yang terbatas. Android tidak mendukung SVG secara langsung, hanya Vector Drawable yang dihasilkan dari SVG melalui Android Studio Asset Studio.
Cara termudah adalah menggunakan Android Studio: klik kanan pada folder drawable → New → Vector Asset → Import local SVG file. Studio secara otomatis mengoptimalkan SVG dan menghasilkan XML Vector Drawable. Opsi lain adalah konverter online seperti SVG2VectorDrawable atau ShapeShifter yang mendukung ekspor dengan animasi.
Masalah biasanya terkait dengan kurangnya dukungan AppCompat. Pastikan flag vectorDrawables.useSupportLibrary = true diatur di build.gradle dan AppCompatDelegate digunakan. Juga periksa apakah Vector Drawable tidak mengandung fitur yang tidak tersedia di versi pustaka AppCompat yang digunakan.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga