Vector Drawable: apa itu, format XML dan cara kerjanya

Penulis: IT Sectr Diterbitkan: 2026-06-12 Waktu membaca: 9 mnt

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 — format grafik vektor Android berbasis XML, distandarisasi sejak API 21
  • Penskalaan tanpa kehilangan kualitas — vektor beradaptasi dengan kerapatan layar apa pun (mdpi, hdpi, xhdpi, dan lebih tinggi)
  • Ukuran APK berkurang 40–60% dengan mengganti banyak file PNG dengan satu file XML
  • Animasi didukung melalui AnimatedVectorDrawable dan AnimatedStateListDrawable
  • Adaptasi tema gelap dilakukan dengan atribut android:theme tanpa menduplikasi sumber daya

Apa itu Vector Drawable?

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.

Komponen Utama Vector Drawable

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.

Format Vector Drawable: struktur XML

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.

xml
<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.

Pengelompokan dan Transformasi

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.

xml
<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).

Vector Drawable vs grafik raster

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.

ParameterVector DrawablePNG
PenskalaanTanpa kehilangan kualitasHilang saat diperbesar
Ukuran file0.5–5 KB10–100 KB per resolusi
Jumlah file1 XML6 PNG (mdpi–xxxhdpi)
AnimasiDidukungHanya pergantian bingkai
Adaptasi temaMelalui ?attrSet terpisah
Adegan kompleksTerbatasSemua

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.

Kapan memilih Vector Drawable

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.

Animasi Vector Drawable

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

Contoh animasi 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.

xml
<!-- 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.

Contoh kode Vector Drawable

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.

xml
<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.

Memuat Vector Drawable dari kode

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.

kotlin
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

Mulai versi Android berapa Vector Drawable didukung?

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.

Bisakah Vector Drawable digunakan di Jetpack Compose?

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.

Apa perbedaan Vector Drawable dengan SVG?

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.

Bagaimana cara mengonversi SVG ke Vector Drawable?

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.

Mengapa Vector Drawable tidak muncul di perangkat lama?

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

  • Vector Drawable — format grafik vektor Android berbasis XML, distandarisasi sejak API 21
  • Penskalaan tanpa kehilangan kualitas — satu file XML menggantikan enam gambar raster untuk kerapatan berbeda
  • Ukuran APK berkurang 40–60% saat mengganti ikon PNG dengan padanan vektor
  • Animasi dilakukan melalui AnimatedVectorDrawable dengan dukungan morphing bentuk dan perubahan warna
  • Tema gelap didukung melalui atribut ?attr/colorControlNormal dan android:theme
  • AppCompat memastikan kompatibilitas mundur hingga Android 2.3 (API 7) melalui useSupportLibrary
  • Gunakan Vector Drawable untuk ikon dan elemen antarmuka, PNG/WebP untuk gambar fotorealistik

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.

Diskusikan proyek

Baca juga