मैं अपने एंड्रॉइड ऐप में वेक्टर ड्रॉबल्स का उपयोग करने का प्रयास कर रहा हूं। से http://developer.android.com/training/material/drawables.html (जोर मेरा):
एंड्रॉइड 5.0 (एपीआई स्तर 21) और इसके बाद के संस्करण में, आप वेक्टर ड्रॉबल्स को परिभाषित कर सकते हैं, जो परिभाषा खोए बिना पैमाने पर है।
इस चित्र का उपयोग करना:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@color/colorPrimary" android:pathData="M14,20A2,2 0 0,1 12,22A2,2 0 0,1 10,20H14M12,2A1,1 0 0,1 13,3V4.08C15.84,4.56 18,7.03 18,10V16L21,19H3L6,16V10C6,7.03 8.16,4.56 11,4.08V3A1,1 0 0,1 12,2Z" />
और यह ImageView:
<ImageView
android:layout_width="400dp"
android:layout_height="400dp"
android:src="@drawable/icon_bell"/>
400dp पर आइकन प्रदर्शित करने का प्रयास करते समय (लार्गिश हाई-रिस सर्पा 2015 में लॉलीपॉप चलाने वाले मोबाइल डिवाइस पर) इस धुंधली छवि का उत्पादन होता है:
वेक्टर ड्रॉबल की परिभाषा में चौड़ाई और ऊंचाई को 200dp में बदलने से 400dp प्रदान किए गए आकार में स्थिति में काफी सुधार होता है। हालाँकि, इसे TextView तत्व (यानी टेक्स्ट के बाईं ओर स्थित आइकन) के लिए एक आकर्षक के रूप में सेट करना अब एक बहुत बड़ा आइकन बनाता है।
मेरे सवाल:
1) वेक्टर ड्रॉबल में चौड़ाई / ऊंचाई विनिर्देश क्यों है? मैंने सोचा कि इनमें से पूरी बात यह है कि वे अपनी परिभाषा में चौड़ाई और ऊँचाई को निरर्थक बना रहे हैं?
2) क्या एक एकल वेक्टर ड्रॉबल का उपयोग करना संभव है जो टेक्स्ट व्यू पर 24dp ड्रॉबल के रूप में काम करता है लेकिन साथ ही साथ बड़ी छवियों का भी उपयोग करने के लिए स्केल करता है? उदाहरण के लिए, मैं विभिन्न आकारों के कई सदिश आकृतियाँ बनाने से कैसे बचूँ और इसके बजाय मेरी प्रदान की गई आवश्यकताओं के लिए कौन-सा पैमाना इस्तेमाल करूँ?
3) मैं चौड़ाई / ऊंचाई विशेषताओं का प्रभावी ढंग से उपयोग कैसे कर सकता हूं और व्यूपोर्टविद / हाइट के साथ क्या अंतर है?
अतिरिक्त जानकारिया:
- डिवाइस API 22 चला रहा है
- ग्रैडल संस्करण 1.5.0 के साथ एंड्रॉइड स्टूडियो v1.5.1 का उपयोग करना
- मैनिफेस्ट संकलन और लक्ष्य स्तर 23, न्यूनतम स्तर 15 है। मैंने भी 21 के स्तर को स्थानांतरित करने की कोशिश की है, लेकिन इससे कोई फर्क नहीं पड़ा।
- एपीके को घटाकर (न्यूनतम स्तर 21 के साथ) ड्रॉ करने योग्य फ़ोल्डर में एक एकल XML संसाधन दिखाता है। कोई रेखापुंज छवियां उत्पन्न नहीं होती हैं।
drawable
फ़ोल्डर है। वेक्टर ड्रॉबल xml फ़ाइल में चौड़ाई / ऊँचाई 24dp है। विशेष रूप से 400dp ऊँचाई / चौड़ाई का एक ImageView विशेष रूप से एक खराब स्केल वाली छवि बना रहा है।
drawable-anydpi-v21
वह यह है कि मेरा minSdkVersion
21 से कम है। यदि आप minSdkVersion
21 से कम पर सेट हैं तो व्यवहार में कोई बदलाव ? XML को किस ओर ले जाना है drawable-anydpi
? मैं एक बदलाव की उम्मीद नहीं करूंगा, लेकिन मैं आपकी वेक्टर इमेज को सही ढंग से स्केल करने की उम्मीद करूंगा ...
drawable-anydpi-v21
Mdi / hdpi / etc में विभिन्न rasterized छवियों के साथ एक एकल xml फ़ाइल । फ़ोल्डरों। हालांकि अंतिम परिणाम में कोई बदलाव नहीं किया गया है।
New -> Vector Asset
इसे चुनता हूं तो मेरे ड्रॉ करने योग्य फ़ोल्डर में वेक्टर छवि XML को गिरा देता है। हालाँकि, अगर मैं एपीके को अनलॉक करने के लिए एपीकेटूल का उपयोग करता हूं जो कि निर्मित होता है, तो मैं देखता हूं कि एक्सएमएल फाइलेंdrawable-anydpi-v21
एपीआई 21+ उपकरणों पर सही ढंग से और पैमाने पर हैं। रेखापुंज फ़ाइलों कोdrawable-<mdpi/hdpi/etc>-v4
फ़ोल्डर्स में रखा जाता है और एपीआई 21+ उपकरणों पर उपयोग नहीं किया जाता है (इस तथ्य के आधार पर कि वे सही पैमाने पर हैं)