Vector Drawable: bu nima, XML format va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-06-12 O'qish vaqti: 9 daq

Vector Drawable — XML-ga asoslangan va sifat yo‘qotmasdan masshtablanadigan tasvirlar yaratish imkonini beruvchi Android uchun vektor grafika formatidir. PNG va JPEG dan farqli o‘laroq, vektor geometrik konturlarni va to‘ldirishlarni matn ko‘rsatmalari shaklida saqlaydi, bu esa minimal fayl hajmi va har qanday ekran zichligiga moslashishni ta’minlaydi. Android Developers (2026) hujjatlariga ko‘ra, Vector Drawable turli piksellar zichligi uchun raster resurslar to‘plamiga nisbatan APK hajmini o‘rtacha 40–60% ga kamaytiradi.

Asosiy ma’lumotlar

  • Vector Drawable — API 21 dan standartlashtirilgan, XML-ga asoslangan Android vektor grafika formati
  • Masshtablash sifat yo‘qotmasdan — vektor har qanday ekran zichligiga moslashadi (mdpi, hdpi, xhdpi va undan yuqori)
  • APK hajmi bir nechta PNG fayllarni bitta XML fayl bilan almashtirish hisobiga 40–60% ga kamayadi
  • Animatsiya AnimatedVectorDrawable va AnimatedStateListDrawable orqali qo‘llab-quvvatlanadi
  • Qorong‘u mavzuga moslashish android:theme atributi orqali resurslarni takrorlamasdan amalga oshiriladi

Vector Drawable nima?

Vector Drawable — SVG (Scalable Vector Graphics) spetsifikatsiyasiga asoslangan, XML formatidagi vektor tasvirni ifodalovchi Android resursidir. Google ushbu formatni Android 5.0 (API 21) da ikonkalar, illyustratsiyalar va boshqa interfeys grafik elementlari uchun raster tasvirlarga muqobil sifatida taqdim etdi.

PNG dan farqli o‘laroq, tasvir sobit o‘lchamdagi piksellar massivi sifatida saqlanadi, Vector Drawable esa shakllarni matematik tarzda — nuqtalar koordinatalari, Bezier egri chiziqlari, to‘ldirishlar va konturlar orqali tavsiflaydi. Bu shuni anglatadiki, bitta vektor tasvir turli ekran zichliklari (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi, nodpi) uchun olti PNG faylni almashtirishi mumkin, bu esa grafik resurslarni saqlashni tubdan soddalashtiradi.

Format nafaqat statik tasvirlarni, balki AnimatedVectorDrawable orqali animatsiyani, shuningdek, qorong‘u mavzuga moslashish va mavzu atributlari orqali shaxsiy ranglarni qo‘llab-quvvatlaydi. Android 7.0 (API 24) dan boshlab, Vector Drawable gradient to‘ldirishlar va murakkab kesish operatsiyalarini (clipPath) ham qo‘llab-quvvatlaydi, bu esa dizayn imkoniyatlarini kengaytiradi.

Vector Drawable ning asosiy komponentlari

Har bir Vector Drawable shakllar chiziladigan virtual koordinatalar tizimi bo‘lgan kenglik, balandlik va viewport parametrlari bilan vector ildiz elementini o‘z ichiga oladi. Ichkarida guruhlar (group) va yo‘llar (path) joylashgan bo‘lib, bu erda path M (moveTo), L (lineTo), C (cubicTo), Z (close) va boshqa buyruqlar ketma-ketligi orqali geometriyani aniqlaydi. Har bir path mavzu resurslariga murojaat qilishi mumkin bo‘lgan o‘z to‘ldirishiga (fillColor) va konturiga (strokeColor) ega bo‘lishi mumkin.

Qo‘shimcha elementlarga kesish uchun clip-path, gradient o‘tishlari uchun gradient va android:theme atributi orqali qorong‘u mavzuga moslashish atributlari kiradi. Vector Drawable dagi barcha ranglar mavzu atributlariga havolalar sifatida belgilanishi mumkin (masalan, ?attr/colorPrimary), bu esa resurslarni takrorlamasdan mavzu o‘zgarganda ikonkalarning ko‘rinishini o‘zgartiradi.

Vector Drawable formati: XML tuzilishi

Vector Drawable XML fayli res/drawable/ katalogiga joylashtiriladi va <vector> ildiz elementiga ega. Ichkarida ierarxiyani tashkil qilish uchun <group> va konturlarni tavsiflash uchun <path> bo‘lishi mumkin. Har bir path SVG yo‘l formatidagi chizish buyruqlari qatori bo‘lgan pathData atributini o‘z ichiga oladi.

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>

Misolda 24×24 viewport ichida radiusi 10 birlik bo‘lgan doira tasvirlangan. fillColor parametri rang resursiga murojaat qiladi, strokeWidth va strokeColor esa konturni belgilaydi. width va height o‘lchamlari dp da ko‘rsatiladi — bu qo‘shimcha o‘zgartirishlarsiz turli piksel zichligidagi ekranlarda to‘g‘ri masshtablashni ta’minlaydi.

Guruhlash va transformatsiyalar

group elementi bir nechta path ni guruhlash va ularga umumiy transformatsiyalarni qo‘llash imkonini beradi: aylantirish (rotation), siljitish (translateX, translateY) va masshtablash (scaleX, scaleY). Guruhlar ichma-ich bo‘lishi mumkin, bu esa ishlashni yo‘qotmasdan yuzlab elementlardan murakkab ierarxiya yaratish imkonini beradi.

xml
<vector ...>
    <group android:name="arrow_group"
        android:pivotX="12"
        android:pivotY="12"
        android:rotation="90">
        <path .../>
    </group>
</vector>

pivotX/pivotY atributi bilan guruhlash animatsiya uchun ishlatiladi: tasvirning bir qismini boshqa elementlardan mustaqil ravishda aylantirish yoki masshtablash mumkin, bu ayniqsa animatsion holat ikonkalarini (masalan, yuklash → muvaffaqiyat) yaratish uchun foydalidir.

Vector Drawable va raster grafika

Vektor va raster grafika o‘rtasidagi tanlov foydalanish stsenariysiga bog‘liq. Vector Drawable kam detalli ikonkalar, illyustratsiyalar va interfeys elementlari uchun ideal, minglab ranglarga ega fotosuratlar va murakkab tasvirlar esa raster formatlarda qoladi.

ParametrVector DrawablePNG
MasshtablashSifat yo‘qotmasdanKattalashtirishda yo‘qotish
Fayl hajmi0.5–5 KB10–100 KB rezolyutsiyaga ko‘ra
Fayllar soni1 XML6 PNG (mdpi–xxxhdpi)
AnimatsiyaQo‘llab-quvvatlanadiFaqat kadr almashinuvi
Mavzuga moslashish?attr orqaliAlohida to‘plamlar
Murakkab sahnalarCheklanganIstalgan

Android Performance Patterns (Google I/O 2016) ga ko‘ra, PNG ikonkalarini Vector Drawable bilan almashtirish ko‘plab grafik resurslarga ega ilovalar uchun APK hajmini 40–60% ga kamaytiradi. Biroq, yuzlab path ga ega murakkab vektorlarni render qilishda CPU yuki ortadi, shuning uchun animatsiyalar va tez-tez qayta chizishlar uchun keshlashtirilgan rasterlardan foydalanish tavsiya etiladi.

Qachon Vector Drawable ni tanlash kerak

Vector Drawable interfeys ikonkalari (asboblar paneli, navigatsiya, statuslar), logotiplar, oddiy illyustratsiyalar va animatsion elementlar uchun maqbuldir. Format ko‘plab ekranlarni qo‘llab-quvvatlashda ayniqsa foydalidir: olti zichlik uchun PNG yaratish o‘rniga bitta XML fayl yetarli. Bu dizaynni saqlashni soddalashtiradi va o‘lcham nomuvofiqligi xatolarini bartaraf qiladi. Fotorealistik gradientlarga ega fotosuratlar va tasvirlar uchun hali ham WebP siqish bilan raster formatlardan foydalaniladi.

Vector Drawable animatsiyasi

Android Vector Drawable animatsiyasini ikki mexanizm orqali qo‘llab-quvvatlaydi: AnimatedVectorDrawable (API 21 dan mavjud) va AnimatedStateListDrawable. Birinchisi path atributlarini — aylantirish, siljitish, rang va shakl o‘zgarishini animatsiya qilish imkonini beradi. Ikkinchisi silliq o‘tish bilan turli holatlar (bosish, tanlash) o‘rtasida almashadi.

AnimatedVectorDrawable uchta XML fayldan foydalanadi: Vector Drawable ning o‘zi, animatsiya tavsifi bilan ObjectAnimator va target ni (guruh yoki yo‘l nomi) animator bilan bog‘laydigan AnimatedVectorDrawable. Animatsiya fillColor, strokeColor, rotation, translateX/Y, scaleX/Y va hatto pathData ni o‘zgartirishi mumkin — ya’ni bir shaklni boshqasiga silliq aylantirishi mumkin (morflashtirish).

Morflashtirish animatsiyasi namunasi

„Plus” ikonkasi „x’” belgisiga aylanadigan animatsiyani ko‘rib chiqamiz. Asosiy cheklov: pathData buyruqlari soni boshlang‘ich va yakuniy holatda bir xil bo‘lishi kerak, aks holda animatsiya ishlamaydi.

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>

ObjectAnimator plus_to_close animatsiyasi pathData xususiyatini boshlang‘ich „plus” shaklidan „x’” shakliga 300 millisekund ichida o‘zgartiradi. Tizim ikki SVG yo‘l buyruqlar to‘plami o‘rtasidagi koordinatalarni avtomatik interpolyatsiya qiladi. Bunday animatsiya Material Design da tugmalar va ikonka holatlarining silliq o‘tishlari uchun keng qo‘llaniladi.

Vector Drawable kod namunalari

Qorong‘u mavzuni qo‘llab-quvvatlaydigan orqa strelka ikonkasi uchun to‘liq XML vektor misolini ko‘rib chiqamiz. Rang mavzu atributiga havola orqali belgilanadi, bu esa resurslarni takrorlamasdan yorug‘ va qorong‘u mavzu o‘rtasida almashishda ikonka rangini avtomatik o‘zgartiradi.

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>

android:tint parametri ?attr/colorControlNormal qiymati bilan avtomatik ravishda tizim boshqaruv elementi rangini qo‘llaydi — yorug‘ mavzuda bu to‘q kul rang, qorong‘uda esa oq rang. arrow nomli guruh ushbu ikonkani AnimatedVectorDrawable orqali animatsiya qilish imkonini beradi.

Vector Drawable ni koddan yuklash

Android da Vector Drawable ni dasturiy yuklash uchun AppCompatResources.getDrawable() sinfi yoki ContextCompat.getDrawable() metodi ishlatiladi. Jetpack Compose dagi zamonaviy loyihalarda raster va vektor Drawable lar resurs formatini avtomatik aniqlaydigan painterResource orqali yuklanadi.

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
)

AppCompatResources.getDrawable() dan foydalanishda AppCompat kutubxonasi API darajasiga qarab tegishli drawable versiyasini o‘zi tanlaydi: Android 5.0 (API 21) dan eski qurilmalarda raster zaxira versiya (fallback), yangilarida esa Vector Drawable ishlatilishi mumkin. Jetpack Compose da painterResource bu moslikni avtomatik boshqaradi.

Tez-tez so‘raladigan savollar

Android ning qaysi versiyasidan Vector Drawable qo‘llab-quvvatlanadi?

Vector Drawable Android 5.0 (API 21) dan boshlab mahalliy qo‘llab-quvvatlanadi. Eski versiyalar uchun AppCompat kutubxonasidan foydalanish kerak (vektor resurslar API 7+ bo‘lgan qurilmalarda u orqali ishlaydi). Shuningdek, build.gradle da vectorDrawables.useSupportLibrary = true bayrog‘i talab qilinadi.

Vector Drawable ni Jetpack Compose da ishlatish mumkinmi?

Ha, Jetpack Compose Vector Drawable ni painterResource() funktsiyasi orqali qo‘llab-quvvatlaydi. Icon komponenti avtomatik ravishda res/drawable/ dan vektor resursini yuklaydi va tint uchun Material mavzusini qo‘llaydi. Vektorlar modifier parametri orqali berilgan istalgan o‘lchamga sifatni yo‘qotmasdan cho‘ziladi.

Vector Drawable SVG dan nimasi bilan farq qiladi?

SVG boy imkoniyatlar to‘plamiga (filtrlar, maskalar, ichki uslublar) ega universal veb standartidir. Vector Drawable Android uchun moslashtirilgan, cheklangan SVG buyruqlar to‘plamiga ega versiyadir. Android to‘g‘ridan-to‘g‘ri SVG ni emas, balki faqat Android Studio Asset Studio orqali SVG dan yaratilgan Vector Drawable ni qo‘llab-quvvatlaydi.

SVG ni Vector Drawable ga qanday aylantirish mumkin?

Eng oddiy usul — Android Studio dan foydalanish: drawable papkasiga o‘ng tugma → New → Vector Asset → Import local SVG file. Studio avtomatik SVG ni optimallashtiradi va XML Vector Drawable yaratadi. Boshqa variant — onlayn konvertorlar, masalan SVG2VectorDrawable yoki animatsiya bilan eksportni qo‘llab-quvvatlaydigan ShapeShifter.

Nega Vector Drawable eski qurilmalarda ko‘rinmaydi?

Muammo odatda AppCompat qo‘llab-quvvatlanmasligi bilan bog‘liq. build.gradle da vectorDrawables.useSupportLibrary = true bayrog‘i o‘rnatilganiga va AppCompatDelegate ishlatilayotganiga ishonch hosil qiling. Shuningdek, Vector Drawable ishlatilayotgan AppCompat kutubxonasi versiyasida mavjud bo‘lmagan imkoniyatlarni o‘z ichiga olmaganligini tekshiring.

Xulosa

  • Vector Drawable — API 21 dan standartlashtirilgan, XML-ga asoslangan Android vektor grafika formati
  • Masshtablash sifat yo‘qotmasdan — bitta XML fayl turli zichliklar uchun oltita raster tasvirni almashtiradi
  • APK hajmi PNG ikonkalarini vektor analoglari bilan almashtirishda 40–60% ga kamayadi
  • Animatsiya shakllar morflashtirishi va rang o‘zgarishi bilan AnimatedVectorDrawable orqali amalga oshiriladi
  • Qorong‘u mavzu ?attr/colorControlNormal va android:theme atributlari orqali qo‘llab-quvvatlanadi
  • AppCompat useSupportLibrary orqali Android 2.3 (API 7) gacha orqaga moslikni ta’minlaydi
  • Foydalaning Vector Drawable ni ikonkalar va interfeys elementlari uchun, PNG/WebP ni fotorealistik tasvirlar uchun

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing