2011-01-27 20 views
228

से ड्रायबल कैसे बनाएं I have एक छवि res/drawable/test.png (R.drawable.test) है।
मैं इस छवि को ऐसे फ़ंक्शन पर पास करना चाहता हूं जो Drawable स्वीकार करता है।
(उदा। MButton.setCompoundDrawables())संसाधन

तो छवि संसाधन को Drawable में कैसे परिवर्तित करें?

उत्तर

492

आपकी गतिविधि में विधि प्राप्त होनी चाहिए स्रोत। है:

Drawable myIcon = getResources().getDrawable(R.drawable.icon); 
+0

क्या आपको उदाहरण के लिए मैनिफेस्ट में कुछ और जोड़ने की ज़रूरत है? मैंने कोड की केवल इस पंक्ति के साथ एक खाली परियोजना बनाई है और मुझे संसाधन $ NotFoundException मिलता है। यह परियोजना hdpi, ldpi और mdpi मानचित्र में icon.png के साथ आई थी। – Vincent

+1

यदि आप इसे गतिविधि कक्षा के बाहर करना चाहते हैं, तो आपको संदर्भ प्राप्त करने के लिए कुछ और तरीका ढूंढना होगा जहां स्रोत स्रोत() रहता है; [यह उत्तर इसे कन्स्ट्रक्टर में पास करने की सिफारिश करता है] (http://stackoverflow.com/a/6214567/404960) – rymo

+34

एपीआई संस्करण 21 के रूप में इस विधि को बहिष्कृत किया गया है और आपको प्रतिस्थापित किया जाना चाहिए: ड्रायबल ड्रायबल = ResourcesCompat.getDrawable (getResources(), पेज।getImageId(), शून्य); – Boren

0

आप दृश्य जहां छवि के रूप में सेट किया गया है से drawable प्राप्त करने की कोशिश कर रहे हैं,

ivshowing.setBackgroundResource(R.drawable.one); 

तो drawable केवल शून्य मान निम्न कोड के साथ वापस आ जाएगी ...

Drawable drawable = (Drawable) ivshowing.getDrawable(); 

तो, यदि आप किसी विशेष दृश्य से ड्रॉ करने योग्य पुनर्प्राप्त करना चाहते हैं, तो छवि को निम्न कोड के साथ सेट करना बेहतर है।

ivshowing.setImageResource(R.drawable.one); 

केवल तब ड्रायबल हम वास्तव में परिवर्तित हो जाएंगे।

20

getDrawable (int id) विधि इसके बजाय आप एपीआई 21+

के लिए getDrawable (int id, Resources.Theme theme) का उपयोग करना चाहिए कोड कुछ इस तरह दिखेगा एपीआई के रूप में 22.

मूल्यह्रास हुआ है।

Drawable myDrawable; 
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ 
    myDrawable = context.getResources().getDrawable(id, context.getTheme()); 
} else { 
    myDrawable = context.getResources().getDrawable(id); 
} 
+0

क्यों हर एपीआई के लिए शून्य पास नहीं है? इसके अलावा: क्या आप सुनिश्चित हैं कि नल सबसे अच्छा विकल्प है? – jonathanrz

+1

GetDrawable (int id, Resources.Theme थीम) एपीआई 21 तक नहीं आया था। – ChrisStillwell

98

यह कोड बहिष्कृत है। इस instad

Drawable drawable = getResources().getDrawable(R.drawable.icon);

का प्रयोग करें।

Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon); 
+6

ध्यान रखें कि यह दिए गए संदर्भ से विषय लागू करेगा। यदि आप यह सुनिश्चित करना चाहते हैं कि कोई थीम उपयोग नहीं की जाती है, तो आप 'ResourcesCompat.getDrawable (getResources(), R.drawable.icon, null) का उपयोग कर सकते हैं; '(जहां तीसरा पैरा एक वैकल्पिक थीम उदाहरण है)। – vaughandroid

9

मैं बस को जोड़ने के लिए है कि यदि आप संदेश "पदावनत" हो रहे हैं getDrawable (...) का उपयोग करते समय आप के बजाय समर्थन पुस्तकालय से निम्न विधि का उपयोग करना चाहिए चाहते हैं।

ContextCompat.getDrawable(getContext(),R.drawable.[name]) 

इस विधि का उपयोग करते समय आपको getResources() का उपयोग करने की आवश्यकता नहीं है।

इस तरह

Drawable mDrawable; 
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ 
    mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]); 
} else { 
    mDrawable = getResources().getDrawable(R.id.[name]); 
} 

यह दोनों पहले और बाद लॉलीपॉप संस्करणों पर काम करता है कुछ कर के बराबर है।