Vector Drawable Android के लिए एक वेक्टर ग्राफ़िक्स प्रारूप है जो XML पर आधारित है और गुणवत्ता खोए बिना स्केलेबल छवियाँ बनाने की अनुमति देता है। PNG और JPEG के विपरीत, वेक्टर ज्यामितीय आकृति और भरण को टेक्स्ट निर्देशों के रूप में संग्रहीत करता है, जो न्यूनतम फ़ाइल आकार और किसी भी स्क्रीन घनत्व के अनुकूलन को सुनिश्चित करता है। Android Developers दस्तावेज़ीकरण (2026) के अनुसार, Vector Drawable विभिन्न रिज़ॉल्यूशन के लिए रास्टर संसाधनों के सेट की तुलना में APK आकार को औसतन 40–60% तक कम करता है।
मुख्य बातें
Vector Drawable एक Android संसाधन है जो SVG (Scalable Vector Graphics) विनिर्देश पर आधारित XML प्रारूप में वेक्टर छवि का प्रतिनिधित्व करता है। Google ने इस प्रारूप को Android 5.0 (API 21) में आइकन, चित्रण और अन्य ग्राफ़िकल UI तत्वों के लिए रास्टर छवियों के विकल्प के रूप में पेश किया।
PNG के विपरीत, जहाँ छवि एक निश्चित आकार की पिक्सेल सारणी के रूप में संग्रहीत होती है, Vector Drawable आकृतियों का गणितीय रूप से वर्णन करता है — बिंदु निर्देशांक, बेज़ियर वक्र, भरण और स्ट्रोक के माध्यम से। इसका मतलब है कि एक एकल वेक्टर छवि विभिन्न स्क्रीन घनत्वों (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi, nodpi) के लिए छह PNG फ़ाइलों को बदल सकती है, जिससे ग्राफ़िक्स संसाधन रखरखाव नाटकीय रूप से सरल हो जाता है।
प्रारूप न केवल स्थिर छवियों बल्कि AnimatedVectorDrawable के माध्यम से एनिमेशन के साथ-साथ थीम विशेषताओं के माध्यम से डार्क थीम अनुकूलन और कस्टम रंगों का भी समर्थन करता है। Android 7.0 (API 24) से, Vector Drawable ग्रेडिएंट भरण और जटिल क्लिप संचालन (clipPath) का भी समर्थन करता है, जो डिज़ाइन संभावनाओं का विस्तार करता है।
प्रत्येक Vector Drawable में चौड़ाई, ऊँचाई और व्यूपोर्ट मापदंडों के साथ एक मूल vector तत्व होता है — एक आभासी निर्देशांक प्रणाली जिसमें आकृतियाँ खींची जाती हैं। अंदर समूह (group) और पथ (path) होते हैं, जहाँ path कमांड के अनुक्रम के माध्यम से ज्यामिति को परिभाषित करता है: M (moveTo), L (lineTo), C (cubicTo), Z (close) और अन्य। प्रत्येक path का अपना fillColor और strokeColor हो सकता है, जो थीम संसाधनों को संदर्भित कर सकता है।
अतिरिक्त तत्वों में क्लिपिंग के लिए clip-path, ग्रेडिएंट संक्रमण के लिए gradient और android:theme विशेषता के माध्यम से डार्क थीम अनुकूलन शामिल हैं। Vector Drawable में सभी रंगों को थीम विशेषताओं (जैसे ?attr/colorPrimary) के संदर्भ के रूप में निर्दिष्ट किया जा सकता है, जो संसाधनों की नकल किए बिना थीम बदलने पर आइकन की उपस्थिति बदल देता है।
Vector Drawable XML फ़ाइल res/drawable/ निर्देशिका में रखी जाती है और इसका एक मूल
<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>
उदाहरण में 24×24 व्यूपोर्ट में 10 इकाइयों त्रिज्या वाले एक वृत्त का वर्णन किया गया है। पैरामीटर fillColor एक रंग संसाधन को संदर्भित करता है, जबकि strokeWidth और strokeColor स्ट्रोक को परिभाषित करते हैं। चौड़ाई और ऊँचाई dp में निर्दिष्ट की जाती है — यह अतिरिक्त परिवर्तनों के बिना विभिन्न पिक्सेल घनत्व वाली स्क्रीन पर सही स्केलिंग सुनिश्चित करता है।
group तत्व कई पथों को समूहित करने और उन पर सामान्य रूपांतरण लागू करने की अनुमति देता है: घूर्णन (rotation), स्थानांतरण (translateX, translateY) और स्केलिंग (scaleX, scaleY)। समूह नेस्टेड हो सकते हैं, जो प्रदर्शन हानि के बिना सैकड़ों तत्वों के साथ जटिल पदानुक्रम बनाने में सक्षम बनाता है।
<vector ...>
<group android:name="arrow_group"
android:pivotX="12"
android:pivotY="12"
android:rotation="90">
<path .../>
</group>
</vector>
pivotX/pivotY विशेषता के साथ समूहीकरण एनिमेशन के लिए उपयोग किया जाता है: आप अन्य तत्वों से स्वतंत्र रूप से छवि के एक भाग को घुमा या स्केल कर सकते हैं, जो एनिमेटेड स्थिति आइकन (जैसे लोडिंग → सफलता) बनाने के लिए विशेष रूप से उपयोगी है।
वेक्टर और रास्टर ग्राफ़िक्स के बीच चुनाव उपयोग के मामले पर निर्भर करता है। Vector Drawable आइकन, चित्रण और कम विवरण वाले UI तत्वों के लिए आदर्श है, जबकि हजारों रंगों वाली तस्वीरें और जटिल छवियाँ रास्टर प्रारूपों में रहती हैं।
| पैरामीटर | Vector Drawable | PNG |
|---|---|---|
| स्केलिंग | गुणवत्ता हानि के बिना | बड़ा करने पर हानि |
| फ़ाइल आकार | 0.5–5 KB | प्रति रिज़ॉल्यूशन 10–100 KB |
| फ़ाइलों की संख्या | 1 XML | 6 PNG (mdpi–xxxhdpi) |
| एनिमेशन | समर्थित | केवल फ्रेम स्विचिंग |
| थीम अनुकूलन | ?attr के माध्यम से | अलग सेट |
| जटिल दृश्य | सीमित | कोई भी |
Android Performance Patterns (Google I/O 2016) के अनुसार, PNG आइकन को Vector Drawable से बदलने से बड़ी संख्या में ग्राफ़िकल संसाधनों वाले ऐप्लिकेशन के लिए APK आकार 40–60% कम हो जाता है। हालाँकि, सैकड़ों पथों वाले जटिल वेक्टर प्रस्तुत करते समय CPU लोड बढ़ जाता है, इसलिए एनिमेशन और बार-बार पुनः चित्रण के लिए पूर्व-कैश्ड रास्टर का उपयोग करने की अनुशंसा की जाती है।
Vector Drawable इंटरफ़ेस आइकन (टूलबार, नेविगेशन, स्थितियाँ), लोगो, सरल चित्रण और एनिमेटेड तत्वों के लिए इष्टतम है। प्रारूप विशेष रूप से कई स्क्रीन का समर्थन करते समय लाभप्रद है: छह घनत्वों के लिए PNG उत्पन्न करने के बजाय, एक एकल XML फ़ाइल पर्याप्त है। यह डिज़ाइन रखरखाव को सरल बनाता है और आकार बेमेल त्रुटियों को समाप्त करता है। तस्वीरों और फोटोयथार्थवादी ग्रेडिएंट छवियों के लिए, WebP संपीड़न वाले रास्टर प्रारूप अभी भी उपयोग किए जाते हैं।
Android दो तंत्रों के माध्यम से Vector Drawable एनिमेशन का समर्थन करता है: AnimatedVectorDrawable (API 21 से उपलब्ध) और AnimatedStateListDrawable। पहला पथ विशेषताओं — घूर्णन, स्थानांतरण, रंग परिवर्तन और आकार रूपांतरण को एनिमेट करने की अनुमति देता है। दूसरा सुचारू संक्रमण के साथ विभिन्न अवस्थाओं (दबाव, हाइलाइट) के बीच स्विच करता है।
AnimatedVectorDrawable तीन XML फ़ाइलों का उपयोग करता है: स्वयं Vector Drawable, एनिमेशन का वर्णन करने वाला ObjectAnimator और एक बाइंडिंग AnimatedVectorDrawable जो लक्ष्य (समूह या पथ नाम) को एनिमेटर से जोड़ता है। एनिमेशन fillColor, strokeColor, rotation, translateX/Y, scaleX/Y और यहाँ तक कि pathData — एक आकृति को दूसरे में सुचारू रूप से रूपांतरित करना (morphing) — बदल सकता है।
एक एनिमेशन पर विचार करें जहाँ प्लस आइकन क्लोज़ आइकन में बदल जाता है। मुख्य सीमा: प्रारंभिक और अंतिम अवस्था में pathData कमांड की संख्या मेल खानी चाहिए, अन्यथा एनिमेशन काम नहीं करेगा।
<!-- 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 मिलीसेकंड में pathData गुण को मूल प्लस आकृति से क्लोज़ आकृति में बदलता है। सिस्टम स्वचालित रूप से SVG पथ कमांड के दो सेटों के बीच निर्देशांकों को इंटरपोलेट करता है। इस प्रकार का एनिमेशन Material Design में बटन और आइकन अवस्था के सुचारू संक्रमण के लिए व्यापक रूप से उपयोग किया जाता है।
आइए डार्क थीम समर्थन के साथ एक बैक एरो आइकन के लिए पूर्ण 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 पैरामीटर मान ?attr/colorControlNormal के साथ स्वचालित रूप से सिस्टम नियंत्रण रंग लागू करता है — लाइट थीम पर गहरा ग्रे, डार्क थीम पर सफेद। एरो नाम का समूह AnimatedVectorDrawable के माध्यम से इस आइकन को एनिमेट करने की अनुमति देता है।
Android में प्रोग्रामेटिक रूप से Vector Drawable लोड करने के लिए AppCompatResources.getDrawable() वर्ग या ContextCompat.getDrawable() विधि का उपयोग किया जाता है। आधुनिक Jetpack Compose प्रोजेक्ट में, रास्टर और वेक्टर Drawable painterResource के माध्यम से लोड किए जाते हैं, जो स्वचालित रूप से संसाधन प्रारूप निर्धारित करता है।
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() का उपयोग करते समय, AppCompat लाइब्रेरी API स्तर के आधार पर स्वचालित रूप से सही drawable संस्करण चुनती है: Android 5.0 (API 21) से पहले के उपकरणों पर रास्टर फ़ॉलबैक का उपयोग किया जा सकता है; नए उपकरणों पर Vector Drawable का उपयोग किया जाता है। Jetpack Compose में, painterResource इस संगतता को स्वचालित रूप से संभालता है।
अक्सर पूछे जाने वाले प्रश्न
Vector Drawable मूल रूप से Android 5.0 (API 21) से समर्थित है। पुराने संस्करणों के लिए AppCompat लाइब्रेरी का उपयोग करना आवश्यक है (वेक्टर संसाधन API 7+ वाले उपकरणों पर इसके माध्यम से काम करते हैं)। build.gradle में vectorDrawables.useSupportLibrary = true फ़्लैग भी आवश्यक है।
हाँ, Jetpack Compose painterResource() फ़ंक्शन के माध्यम से Vector Drawable का समर्थन करता है। Icon घटक स्वचालित रूप से res/drawable/ से वेक्टर संसाधन लोड करता है और टिंट के लिए Material थीम लागू करता है। वेक्टर modifier पैरामीटर के माध्यम से निर्दिष्ट किसी भी आकार में गुणवत्ता हानि के बिना स्केल होते हैं।
SVG एक सार्वभौमिक वेब मानक है जिसमें सुविधाओं का एक समृद्ध सेट है (फ़िल्टर, मास्क, एम्बेडेड शैलियाँ)। Vector Drawable SVG कमांड के सीमित उपसमूह के साथ Android-अनुकूलित संस्करण है। Android सीधे SVG का समर्थन नहीं करता, केवल Android Studio Asset Studio के माध्यम से SVG से उत्पन्न Vector Drawable का समर्थन करता है।
सबसे आसान तरीका Android Studio का उपयोग करना है: drawable फ़ोल्डर पर राइट-क्लिक करें → New → Vector Asset → Import local SVG file। स्टूडियो स्वचालित रूप से SVG को अनुकूलित करता है और XML Vector Drawable उत्पन्न करता है। दूसरा विकल्प ऑनलाइन कन्वर्टर जैसे SVG2VectorDrawable या ShapeShifter है, जो एनिमेशन के साथ निर्यात का समर्थन करता है।
समस्या आमतौर पर AppCompat समर्थन की कमी से संबंधित है। सुनिश्चित करें कि build.gradle में vectorDrawables.useSupportLibrary = true फ़्लैग सेट है और AppCompatDelegate का उपयोग किया गया है। यह भी जाँचें कि Vector Drawable में AppCompat लाइब्रेरी के उपयोग किए गए संस्करण में अनुपलब्ध सुविधाएँ तो नहीं हैं।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें