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 — 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.
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 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.
<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.
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.
<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.
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.
| Parametr | Vector Drawable | PNG |
|---|---|---|
| Masshtablash | Sifat yo‘qotmasdan | Kattalashtirishda yo‘qotish |
| Fayl hajmi | 0.5–5 KB | 10–100 KB rezolyutsiyaga ko‘ra |
| Fayllar soni | 1 XML | 6 PNG (mdpi–xxxhdpi) |
| Animatsiya | Qo‘llab-quvvatlanadi | Faqat kadr almashinuvi |
| Mavzuga moslashish | ?attr orqali | Alohida to‘plamlar |
| Murakkab sahnalar | Cheklangan | Istalgan |
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.
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.
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).
„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.
<!-- 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.
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.
<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.
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.
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
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.
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.
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.
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.
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
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.