VectorDrawable - क्या यह एंड्रॉइड के प्री-लॉलीपॉप संस्करणों के लिए किसी तरह उपलब्ध है? [बन्द है]


87

पृष्ठभूमि

मैंने देखा है कि एंड्रॉइड अब कुछ प्रकार के वेक्टर ड्राइंग का समर्थन करता है, " वेक्टरड्रॉवेबल " नामक एक वर्ग के माध्यम से (और एनिमेटेडवेटवर्ल्ड , बीटीडब्ल्यू भी )। मैंने इसके बारे में एंड्रॉइड-स्टूडियो में नया क्या है, इसे देखकर पाया है ।

मुझे आश्चर्य है कि अगर यह एक से अधिक फ़ोल्डर (में एकाधिक फ़ाइलों को डाल करने के लिए होने के अंत होगा mdpi, hdpi, xhdpi, आदि)। यह बहुत अच्छा होगा और कुछ मामलों पर ऐप्स का आकार कम कर सकता है।

प्रश्न

मैं इस नई कक्षा के बारे में कुछ प्रश्न पूछना चाहता हूँ:

  1. क्या पुराने Android संस्करणों में इसका उपयोग करना संभव है, शायद Google के समर्थन पुस्तकालय के माध्यम से भी?

  2. मैं परिचित नहीं हूँ कि यह कैसे काम करता है, लेकिन क्या लॉलीपॉप एसवीजी फाइलों को संभाल सकता है? क्या यह कुछ भी कर सकता है जो एसवीजी फाइलों पर प्राप्त हो सकता है?

  3. क्या इसका कोई नमूना / ट्यूटोरियल / वीडियो है जो मैंने पाया है, इसके अलावा, इसका उपयोग करने का कोई वीडियो है?


3
जहां तक मैं देख सकता हूँ, VectorDrawable है androidification एसवीजी फ़ाइलों की। मैं 3 जी लाइब्रेरी के उपयोग के माध्यम से एक वर्ष के लिए एसवीजी का उपयोग कर रहा हूं , हालांकि। ( android-svg , svg-android और ऐसे)। इसी तरह के नाम वाले भी हैं। प्रत्येक व्यक्ति दूसरे से भिन्न होता है, इसलिए, अपनी आवश्यकताओं के आधार पर सटीक रूप से चुनें।
फैंटमैक्सएक्स

7
मैंने SVG को xml रिसोर्स वेक्टर (केवल लॉलीपॉप) में परिवर्तित करने के लिए ऑनलाइन टूल बनाया है - inloop.github.io/svg2android - इसका अभी तक शुरुआती अल्फ़ा में इतना परीक्षण नहीं किया गया था। यह सरल svg फ़ाइलों का समर्थन करता है (जैसा कि एंड्रॉइड सपोर्ट करता है), मैंने इसका परीक्षण inkscape के साथ किया है - कुछ आकृतियों (रेक्ट, सर्कल, सर्पिल ...) को खींचा, फिर सभी का चयन करें "Path-> ऑब्जेक्ट टू पाथ", * .svg में निर्यात किया। साइट में गिरा, xml उत्पन्न और ठीक काम करता है।
युराज

1
@ युराज वाह, यह बहुत अच्छा है! अच्छा कार्य ! और इतने कम समय में ... यहाँ, मेरा +1 लें। :)
एंड्रॉइड डेवलपर

Inloop.github.io/svg2android के बारे में ... यह s a very usefull tool but Iइस तरह के मामले में अनुचित परिणाम मिला है और मुझे नहीं पता कि क्या गलत है ... हम्मम, आगे रिलीज के लिए मैं चाहता हूं कि यह उपकरण खराब प्रारूप के बारे में नहीं सोचता है ... अगर मैं 3-पार्टी के साथ शुद्ध
svg-

@AlexZezekalo आपको इसके बारे में Github वेबपेज पर लिखना चाहिए: github.com/inloop/svg2android
android developer

जवाबों:


39

मार्च 2016 को अद्यतन

द्वारा Android समर्थन लाइब्रेरी 23.2.1 अद्यतन, समर्थन वेक्टर ड्रॉएबल और एनिमेटेड वेक्टर ड्रॉएबल। (आप उसी के लिए नवीनतम का उपयोग भी कर सकते हैं)

कृपया फ़ाइल में लाइब्रेरी के संस्करण को अपडेट करें।

compile 'com.android.support:recyclerview-v7:23.2.1'

वेक्टर ड्रॉबल्स आपको एक्सएमएल में परिभाषित एकल वेक्टर ग्राफिक के साथ कई पीएनजी परिसंपत्तियों को बदलने की अनुमति देते हैं । जबकि पहले लॉलीपॉप और उच्चतर उपकरणों तक सीमित था , दोनों अब VectorDrawableऔर AnimatedVectorDrawableदो नए समर्थन पुस्तकालयों के समर्थन-वेक्टर-ड्रॉबल और एनिमेटेड-वेक्टर-ड्रॉएबल के माध्यम से उपलब्ध हैं app:srcCompatवेक्टर आरेखों को संदर्भित करने के लिए नई विशेषता।

कुछ नमूना उदाहरणों के साथ जीथब पर स्रोत की जांच करें ।

V7 appcompat पुस्तकालय के लिए परिवर्तन:

वेक्टर संपत्तियों पर निर्भर निर्भरता ताकि ऐपकोम्पैट लाइब्रेरी का उपयोग करने वाले डेवलपर्स को उपयोग करने के लिए मजबूर न किया जाए VectorDrawableऔर इसके साथ संबंधित बिल्ड झंडे।


3
वैक्टर समर्थन के बारे में, क्या यह ग्रेडल प्लगइन को अपडेट करने और "वेक्टरड्राबेल्स.यूज़सुपोर्टलाइंस = सत्य" का उपयोग करने के लिए "डिफॉल्टकॉन्फिग" के अंदर पर्याप्त नहीं है?
Android डेवलपर

1
हां, ग्रैडल प्लगिन 2.0+ के लिए और ग्रैडल प्लगिन 1.5 के लिए आपको जोड़ना होगा -> Android {defaultConfig {उत्पन्नडैंसिटीज = []} // // यह आपके लिए संभाला है 2.0+ ग्रैडल प्लगिन aaptoate {extraParameters ”--no-version -वेक्टर "}}
अमित वाघेला

1
इसके अलावा, कृपया यहां कुछ कोड दिखाएं। किसी दिन एक लिंक मृत हो सकता है। इस प्रयास के लिए आपको +1 मिलेगा
Android डेवलपर

हाँ यकीनन। गिट और यहाँ पर संक्षेप में कोड पोस्ट करेंगे।
अमित वाघेला

2
compileबयान से ऊपर का तात्पर्य है कि परियोजना का उपयोग करता है RecyclerViewजो हमेशा मामला नहीं है।
razzledazzle

13

अद्यतन 2 : वे इसे समर्थन लाइब्रेरी 23.4.0 में फिर से सक्षम करते हैं:

AppCompat उपयोगकर्ताओं के लिए, हमने AppCompatDelegate.setCompatVectorFromResourceEnabled (सत्य) के माध्यम से संसाधनों (23.2 में पाया गया व्यवहार) से पुन: सक्षम वेक्टर को फिर से सक्षम करने के लिए एक ऑप्ट-इन एपीआई जोड़ा है - ध्यान रखें कि यह अभी भी स्मृति के उपयोग के साथ समस्या पैदा कर सकता है और कॉन्फ़िगरेशन इंस्टेंसेस को अपडेट करने में समस्याएं, इसलिए यह डिफ़ॉल्ट रूप से अक्षम है।

यह अब उपलब्ध 23.4.0 की जाँच करें

अपडेट : यह संस्करण 23.3.0 से काम नहीं करता है । विवरण के लिए यहां देखें। प्रॉक्सी ड्राबल्स काम नहीं करते हैं। app:srcCompatऔर setImageResource()काम, हालांकि।


वेक्टर ड्रॉबल सपोर्ट 23.2 और उसके बाद के संस्करण के सपोर्ट लाइब्रेरी से उपलब्ध है। हालांकि, उन ड्रॉबल्स का सही उपयोग करने के लिए, उन्हें परोक्ष रूप से संदर्भित किया जाना चाहिए।

पहला कदम AppCompatसंस्करण को टक्कर देना होगा ।

compile 'com.android.support:appcompat-v7:23.2.0'

दूसरा वेक्टर ड्रा करने योग्य समर्थन सक्षम करें। ग्रैडल प्लगइन का उपयोग करते समय, 2.0+

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}

अन्यथा

android {  
   defaultConfig {  
     generatedDensities = []  
   }  

   aaptOptions {  
     additionalParameters "--no-version-vectors"  
   }  
}

तीसरा , जुड़े हुए उत्तर को देखें ।


हाँ, मैंने यह देखा। विस्तारित जानकारी के लिए धन्यवाद। मुझे लगता है कि सिस्टम के लिए व्यापक सामान (सूचनाएं, विगेट्स, ...) यह निश्चित रूप से उपलब्ध नहीं है ...
एंड्रॉयड डेवलपर

निश्चित है कि यह काम करना चाहिए। इसके मूल रूप से संदर्भित बिंदु उस बिंदु से हैं। या तुमने कोशिश की? एक उदाहरण एक वेक्टर के लिए एक ड्रॉबल सेट MenuItemकरता है, जो ठीक काम करता है।
razzledazzle

क्या आप सुनिश्चित हैं कि यह सूचनाओं और विगेट्स के लिए भी काम करेगा? मैं इसे पुराने एंड्रॉइड वर्जन पर काम करने की बात कर रहा हूं। वे इसके लिए वैक्टर को कैसे संभाल सकते थे? वे समर्थन पुस्तकालय का उपयोग नहीं कर सकते, नहीं?
एंड्रॉइड डेवलपर

समर्थन लाइब्रेरी संस्करण का उपयोग करने का पूरा बिंदु पुराने संस्करणों में काम करने के लिए है। जैसा कि प्रलेखित है, यह एपीआई 7 से वापस सभी तरह से काम करता है और एपीआई 11 से एनिमेटेड वेक्टर
ड्राबेल्स

फिर से, यह ऐप के अंदर काम करता है, लेकिन अगर आप उन्हें बाहर का उपयोग करने की कोशिश करते हैं, जैसे सूचना और विजेट पर? मुझे नहीं लगता कि यह वहां काम करेगा, क्योंकि मुझे नहीं लगता कि आप अन्य एप्लिकेशन (लॉन्चर्स) समर्थन लाइब्रेरी का उपयोग कर सकते हैं, अकेले सूचना पट्टी का उपयोग करें। या तुमने कोशिश की?
एंड्रॉयड डेवलपर

12

आप इस समर्थन पुस्तकालय की कोशिश कर सकते हैं । यह पूरी तरह से पश्चगामी अनुकूलता के साथ लॉलीपॉप में पेश किए गए वेक्टरड्राएबल और एनिमेटेडवेक्टरड्रैवेबल का समर्थन करता है।


वह लाइब्रेरी केवल API स्तर 14 और उसके बाद के संस्करण के साथ संगत है, जबकि श्री वेक्टर लाइब्रेरी 7+ से नीचे संगत है।
16

@ डोनटर्नर: मैं आपकी बात से सहमत हूं, लेकिन मुझे नहीं लगता कि देव अभी भी 7 एपीआई के लिए ऐप विकसित कर रहे हैं।
V_J

4
शायद एपीआई 7 नहीं, लेकिन निश्चित रूप से एपीआई 10 (जिंजरब्रेड) के रूप में यह 4.1% Android बाजार ( डेवलपर . android.com/about/dashboards/index.html ) के लिए है।
donturner

8

यहां कुछ उत्तरों को पूरक करने के लिए: हां, आप वेक्टरड्रॉबल्स प्री-लॉलीपॉप के लिए समर्थन प्राप्त कर सकते हैं , कम से कम आंशिक।

कितना आंशिक? यह निर्भर करता है - मैंने इस आरेख को सहायता के लिए बनाया है (समर्थन लाइब्रेरी के लिए मान्य 23.4.0 से - कम से कम - 25.1.0)।

वेक्टरड्राएबल धोखा देती है


वास्तव में, लेकिन मुझे लगता है कि अगर आप इसे पीएनजी फाइलों को ऑटो-जेनरेट करने की अनुमति देते हैं, तो यह सुरक्षित होना चाहिए
Android डेवलपर

1
पूर्वनिर्धारित तरीके से समझाया गया।
अभिजीत कुराने

यह स्वीकृत उत्तर होना चाहिए। धन्यवाद।
जस्टिन मीनर्स 21

6

दुर्भाग्य से, इस समय वेक्टरड्रायबल और एनिमेटेडवेक्टरड्राएबेबल समर्थन पुस्तकालय में उपलब्ध नहीं हैं। लेकिन प्री-लॉलीपॉप संस्करणों में इस सुविधा का लाभ उठाने के लिए, आप MrVector नामक अनौपचारिक बैकपोर्ट का उपयोग कर सकते हैं।

MrVector Github में उपलब्ध है और यह एंड्रॉइड वर्जन 7+ को सपोर्ट करेगा।

आधिकारिक रीडमे से

MrVector निर्भरता जोड़ने के लिए अपने build.gradle निर्भरता ब्लॉक के लिए निम्न पंक्ति जोड़ें।

compile 'com.telly:mrvector:0.2.0'

वेक्टर एक्सएमएल से ड्राएबल बनाने के लिए,

Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_android);

उम्मीद है की यह मदद करेगा।


1
MrVector को कुछ दिनों पहले अपकमिंग वेक्टरड्रॉलेबलकॉमपैट के पक्ष में हटा दिया गया है जो समर्थन पुस्तकालय का हिस्सा होगा।
विंडराइडर

यह वास्तव में अच्छा है। जानकारी के लिए धन्यवाद।
gnuanu

हां, मैं अपने ऐप को कुछ मोटे-मोटे एसवीजी के साथ जोड़ने के लिए इंतजार नहीं कर सकता: डी
विंडराइडर

1
पदावनत। इसके बजाय इस stackoverflow.com/a/30502261/1954675 का उपयोग करें ।
V_J

3

यदि आप वेक्टरड्राइव का उपयोग कर रहे हैं, तो प्री-लॉलीपॉप संस्करणों के लिए एंड्रॉइड स्टूडियो स्वचालित रूप से पीएनजी फाइलों (आपकी एक्सएमएल फाइलों के आधार पर) के अनुसार उत्पन्न करेगा।

ध्यान दें कि उन उत्पन्न PNG फ़ाइलों को 21 से नीचे API चलाने वाले उपकरणों पर वेक्टरड्रैबल्स के बजाय BitmapDrawables माना जाता है और इसलिए उन उपकरणों पर एनिमेटेड या समान नहीं हो सकता है।

अधिक जानकारी के लिए "पीछे की संगतता" देखें: http://android-developers.blogspot.co.at/2015/09/android-studio-14.html


हां, यह हाल ही में प्रकाशित हुआ था। हालांकि, यह वैक्टर का उपयोग करने के बजाय, पीएनजी का उपयोग कर रहा है, इसलिए अगर मैं छवि को धारण करने वाले छवि दृश्य का आकार बदलता हूं, तो यह पिक्सेलयुक्त / धुंधला हो जाएगा।
एंड्रॉयड डेवलपर

@android डेवलपर: आप आंशिक रूप से सही हैं। यह व्यवहार घटित होगा, लेकिन यह वेक्टरड्रॉबल्स के लिए समान होगा। प्रत्येक वेक्टरड्राइव में एक चौड़ाई और ऊंचाई होती है जो कि XML के भीतर परिभाषित होती है (जैसे वेक्टर_ निकासी योग्य। Xml)। यदि यह चौड़ाई / ऊँचाई 50x50dp पर सेट है, लेकिन आप ImageView आकार को 100x100dp पर सेट करते हैं, तो परिणाम तब भी धुंधला हो जाएगा, भले ही आप Android 5.0 चला रहे हों (और इसलिए ऑटो-जनरेट किए गए BitDrawable के बजाय वेक्टरड्राइव का उपयोग कर रहे हैं)। एक सामान्य बिटमैप पर एक वेक्टरड्राएबल का वास्तविक लाभ यह है कि यह स्क्रीन-डीपीआई को ध्यान में रखता है और इसलिए 4k डिस्प्ले पर भी धुंधला नहीं होगा।
महालिफिकेशन ऑक्ट

आपका मतलब है कि वेक्टरड्रैबल उस आकार का उपयोग करते समय अच्छा नहीं दिखाता है जो इसके लिए निर्धारित नहीं था? लेकिन यह एक सदिश सामग्री है .... यह अन्यथा काम क्यों करेगा?
एंड्रॉइड डेवलपर

क्या यह एनिमेटेड वेक्टर ड्रॉबल्स के लिए भी पीएनजी उत्पन्न करता है?
लुई कैड

नहीं, यह उस मामले के लिए PNGs नहीं बनाएगा। यदि आप एंड्रॉइड 5.0 से पहले एंड्रॉइड वर्जन पर चलने वाले उपकरणों पर वेक्टर को एनिमेट करना चाहते हैं, तो आप
वेक्टरड्राेबलटेम्पल

3

लॉलीपॉप तीसरे पक्ष के काम के बिना एसवीजी फाइलों को संभाल नहीं सकता है।

सबसे अच्छा समाधान मुझे मिला है कि एसवीजी के साथ वेक्टरवे्रएबल कनवर्टर के लिए बेटरवेक्टरड्रैबेबल लिब एक साथ है ।

BetterVectorDrawable Android 4.0+ पर Android 5.0+ पर कॉन्फ़िगर करने योग्य फ़ॉल-बैक व्यवहार के साथ AndroidDrawable कार्यान्वयन योग्य है।

एसवीजी को वेक्टरड्राइवेबल कन्वर्टर एसवीजी छवियों का एंड्रॉइड वेक्टरड्रॉएबल एक्सएमएल संसाधन फ़ाइलों का बैच कनवर्टर है। ऑनलाइन संस्करण

लिंक रीडम्स की ओर इशारा करते हैं, जो कि लिब और कन्वर्टर का उपयोग करने के बारे में पर्याप्त जानकारी प्रदान करते हैं।


2

इस समय समर्थन लाइब्रेरी में कोई वेक्टरड्राइव नहीं हैं।

फंकिस्टिन सही है - वेक्टरड्राइव एसवीजी के समान है, केवल वेक्टर ड्राइंग की सुविधाओं का समर्थन करता है जो उच्चतम मांग में हैं ताकि एंड्रॉइड प्रदर्शन पर ध्यान केंद्रित कर सके। pathData, उदाहरण के लिए SVG के "d" स्ट्रिंग के समान प्रारूप है।


इसलिए यह तभी प्रासंगिक होगा जब लॉलीपॉप पर्याप्त लोकप्रिय हो जाए, और तब भी, यह बहुत सारी सुविधाएँ प्रदान नहीं करता है। :(
Android डेवलपर

क्या आप नए वेक्टर एपीआई के किसी भी ट्यूटोरियल / नमूना / वीडियो के बारे में जानते हैं?
Android डेवलपर

2
मुझे अब एक मिल गया है: blog.sqisland.com/2014/10/… , github.com/chiuki/animated-vector-rectable
android developer

1

बड़ी खबर यह है कि Google ने एंड्रॉइड सपोर्ट लाइब्रेरी 23.2 को वेक्टर वेक्टर और एनिमेटेड वेक्टर ड्रॉबल्स जारी किया है!

लेकिन धन्यवाद उन लोगों को जाना जिन्होंने इस पुस्तकालय को Google से पहले पोर्ट किया था!

यह वह जगह है जहां AppCompat पुस्तकालय महान हैं, वे एंड्रॉइड की कई नई सुविधाओं को बहुत पहले के संस्करणों में वापस ला सकते हैं। नए लागू किए गए वेक्टरड्राएबल क्लास के साथ, डेवलपर्स अब सभी वेक्टर छवियों का उपयोग एपीआई 7 (एंड्रॉइड 2.1 एक्लेयर) पर वापस कर सकते हैं। एनिमेटेड वैक्टर थोड़ा अधिक सीमित हैं, जो केवल एपीआई 11 (एंड्रॉइड 3.0 हनीकॉम्ब) के रूप में वापस जा रहे हैं, लेकिन यह अभी भी सक्रिय उपयोग में 97% से अधिक उपकरणों को शामिल करता है

उपयोग करने के लिए गाइड:

देखें " उम्र के इस वैक्टर " @chrisbanes द्वारा


1
अच्छा! क्या आप नए सपोर्ट लाइब्रेरी के वैक्टर एपीआई का उपयोग करने के बारे में कुछ नमूने / ट्यूटोरियल साझा कर सकते हैं?
Android डेवलपर

ज़रूर ! पहले से ही सूची में करने के लिए मेरे सप्ताहांत में जोड़ दिया! :)
LOG_TAG

1
धन्यवाद। यदि यह छोटा है, तो कृपया यहाँ भी लिखें।
Android डेवलपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.