क्या Android किसी SVG को सीधे drawable के रूप में इस्तेमाल कर सकता है?

VectorDrawable रिसोर्स Android की XML शब्दावली इस्तेमाल करता है: एक vector एलिमेंट, जिसमें viewport, दिखने वाले डाइमेंशन और ड्रॉइंग पाथ होते हैं। logo.svg का नाम बदलकर logo.xml करने से ये एलिमेंट नहीं बदलते। SVG फ़िल, स्ट्रोक और ट्रांसफ़ॉर्म के लिए अलग नाम इस्तेमाल करता है, और ऐसे फ़ीचर सपोर्ट करता है जिन्हें यह एक्सपोर्टर जानबूझकर नहीं लेता।

सिंपल इंटरफ़ेस आइकन या फ़्लैट इलस्ट्रेशन के लिए SVG से Android कन्वर्टर इस्तेमाल करें। यह आपका अपलोड किया SVG या आपका कोई अनलॉक किया गया नतीजा लेता है। अगर आप बिटमैप से शुरू कर रहे हैं, तो पहले इमेज को वेक्टर में ट्रेस करें, आउटलाइन जांचें, और फिर एक्सपोर्ट करें। रिसोर्स कन्वर्ट करने से न तो फिर से ट्रेस होता है, न ही किसी मौजूदा नतीजे को अनलॉक करने की ज़रूरत खत्म होती है।

एक छोटा उदाहरण जिसे आप खुद आज़मा सकते हैं

इस त्रिकोण को triangle.svg के रूप में सेव करें और अपलोड करें। रिसोर्स का नाम ic_triangle और सबसे लंबी साइड 24 dp चुनें।

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
  <path fill="#fa643c" d="M12 2L22 22H2Z"/>
</svg>

डाउनलोड किए गए XML में 24 गुणा 24 का viewport, 24 dp के डाइमेंशन और एक पाथ होता है। इसका नारंगी फ़िल Android का अल्फ़ा-पहले वाला रंग #fffa643c बन जाता है। ic_triangle.xml को app/src/main/res/drawable/ में रखें। लेआउट में android:src="@drawable/ic_triangle" इस्तेमाल करें; ऐप के कोड में, उससे जुड़ा drawable रिसोर्स आइडेंटिफ़ायर इस्तेमाल करें।

Viewport ज्योमेट्री बताता है। dp डाइमेंशन बताते हैं कि drawable किस साइज़ में दिखना चाहिए। आयताकार SVG अपना आस्पेक्ट रेशियो बनाए रखता है: सबसे लंबी साइड 48 dp चुनने से वह खिंचकर चौकोर नहीं बनता। रिसोर्स का नाम छोटे अक्षर से शुरू होता है और उसमें छोटे अक्षर, अंक और अंडरस्कोर हो सकते हैं।

कन्वर्ज़न के बाद क्या बचता है?

हमारा कन्वर्टर पाथ और बुनियादी ज्योमेट्रिक शेप, ठोस रंग, फ़िल ओपेसिटी, सपोर्ट होने वाली स्ट्रोक स्टाइल, और nonzero व even-odd दोनों तरह के फ़िल सपोर्ट करता है। सपोर्ट होने वाले ट्रांसफ़ॉर्म को यह पाथ के कोऑर्डिनेट में मिला देता है। Even-odd फ़िलिंग की वजह से ही यह एक्सपोर्ट API 24 और उसके बाद के वर्ज़न के लिए है। यह पुराने ऐप्स के लिए कम्पैटिबिलिटी रैपर नहीं बनाता।

टेक्स्ट, ग्रेडिएंट, मास्क, क्लिपिंग, एम्बेड की गई तस्वीरें और इफ़ेक्ट के लिए अलग तैयारी चाहिए। अपने वेक्टर एडिटर में टेक्स्ट को आउटलाइन में बदलें। अगर ट्रांसफ़ॉर्म किसी स्ट्रोक की दोनों दिशाओं को अलग-अलग स्केल करता है, तो उस स्ट्रोक को आउटलाइन में बदलें। ग्रुप ओपेसिटी ओवरलैप होने वाली शेप को बदल सकती है, इसलिए एक्सपोर्टर ओपेसिटी को अलग-अलग लगाकर तस्वीर बदलने के बजाय उसे लेता ही नहीं। जो भी असुरक्षित चीज़ हटाई गई, नतीजे में उसकी लिस्ट होती है।

बारीक आर्टवर्क के लिए PNG एक्सपोर्ट ज़्यादा सही रिसोर्स हो सकता है। बहुत ज़्यादा पाथ होने पर रेंडर होने में समय लग सकता है, भले ही फ़ाइल तकनीकी रूप से वेक्टर हो। फ़ालतू पॉइंट कम करें और स्क्रीन पर असली साइज़ में टेस्ट करें।

ऐप में नतीजा जांचें

Android Studio में रिसोर्स बिल्ड करें और उसे हल्के और डार्क बैकग्राउंड पर देखें। अक्षरों के अंदर के छेद, पतले स्ट्रोक, सही रंग और ट्रांसपेरेंसी जांचें। छोटे साइज़ पर ओरिजिनल और drawable की तुलना करें, जहां छोटी-छोटी डिटेल सबसे ज़्यादा मायने रखती हैं। XML का सफल कंपाइल होना बताता है कि रिसोर्स मान लिया गया है; लेकिन उसका आखिरी रूप डिवाइस की रेंडरिंग और आपके ऐप की tint सेटिंग्स से ही तय होता है।

लॉन्चर आइकन के लिए ऐप आइकन जेनरेटर इस्तेमाल करें। लॉन्चर आइकन के लिए डेंसिटी और adaptive लेयर की ज़रूरतें होती हैं, जो एक आम drawable एक्सपोर्ट में शामिल नहीं होतीं।