2011-02-02 21 views
11

संपत्ति फ़ोल्डर से LinearLayout की पिछली छवि को सेट करते समय मुझे समस्या का सामना करना पड़ रहा है।एंड्रॉइड में संपत्ति फ़ोल्डर से पृष्ठभूमि छवि कैसे सेट करें?

String filePath="file:///android_asset/images/test.png"; 
    Drawable d = Drawable.createFromPath(filePath); 
    frontTextView.setBackgroundDrawable(d); 

क्या कोई मेरी मदद कर सकता है।

+0

समस्या क्या है? क्या ऐप दुर्घटनाग्रस्त है? बीटीडब्ल्यू, आप 'res/drawable' फ़ोल्डर के बजाय संपत्ति फ़ोल्डर का उपयोग क्यों कर रहे हैं? –

+0

यह कुछ भी प्रदर्शित नहीं करता है। मैं res/drawable का उपयोग नहीं कर सकता क्योंकि मुझे लाइनरलेआउट की पृष्ठभूमि को गतिशील रूप से बदलना है। – Altaf

+0

वास्तव में, शायद आपको अन्य उद्देश्य के लिए संपत्ति फ़ोल्डर की आवश्यकता है लेकिन आप 'res/drawable' फ़ोल्डर का उपयोग करके गतिशील रूप से पृष्ठभूमि को बदल सकते हैं: 'setBackgroundResource (R.id.bg1); setBackgroundResource (R.id.bg2) ' –

उत्तर

16

ठीक है, मामले में किसी और को यहाँ ठोकर, यह बहुत समस्या है जहाँ आप एक छवि है जो आस्तियों में है से एक दृश्य की पृष्ठभूमि सेट करना चाहते हैं के साथ:

Drawable d = Drawable.createFromStream(getAssets().open(path_in_assets), null); 

और फिर कुछ देखें कि केवल एक पृष्ठभूमि के रूप में ड्रॉएबल का समर्थन करता है पर सेट करें।

+0

मुझे यह पसंद है कि आपने इसे एक सिंगल लाइनर बनाया है :) –

8

जहां तक ​​मुझे पता है, you cannot access assets directly जैसे आप कोशिश कर रहे हैं। यदि आप इसे एक संपत्ति के रूप में स्टोर करना चाहते हैं तो आपको अपने डेटा प्राप्त करने के लिए AssetManager कक्षा का उपयोग करने की आवश्यकता होगी। संसाधनों और संपत्तियों के बारे में कुछ बताते हुए Here's a pretty decent blog post, हालांकि आधिकारिक दस्तावेज भी एक अच्छा संसाधन है।

मैं यह भी जोड़ूंगा कि पृष्ठभूमि छवियों जैसी चीजें आमतौर पर res/drawable में संग्रहीत होती हैं और R.drawable.* शैली (उपरोक्त ब्लॉग पोस्ट भी इस पर चर्चा करती है) का उपयोग करके उपयोग की जाती है। यह वास्तव में स्पष्ट नहीं है कि आपको अपने प्रदत्त कोड नमूने से ऐसा करने की आवश्यकता क्यों है, हालांकि, मुझे लगता है कि आखिरकार आपका कॉल है।

2

संपादित करें: InputStream से छवि बनाने के लिए जोड़ा ...

मैं ImageButton का उपयोग कर समान समस्या थी। मैंने इसे संपत्ति से बिटमैप लोड करके और छविबटन के लिए छवि के रूप में उपयोग करके इसे समझ लिया। शायद एक अच्छा दृष्टिकोण नहीं है, लेकिन काम कर रहा है और मेरी समस्या हल कर रहा है - उपरोक्तों को खींचने योग्य डीआईआर में रखने की अक्षमता और फ़ाइल नामों में वर्णों की अनुमति नहीं है।

(हाँ, मैं subdir के बजाय उपसर्ग का उपयोग कर सकते हैं और आकार से मिलान करने के लिए फ़ाइलों का नाम (लोअरकेस केवल और नंबर) और मैं शायद इसे बाद में कर देगा।)

InputStream is = null; 
try { 
    is = this.getResources().getAssets().open("Images/Fruits/Apple.png"); 
} catch (IOException e) { 
    Log.w("EL", e); 
} 

Bitmap image = BitmapFactory.decodeStream(is); 

ImageButton ib2 = (ImageButton) findViewById(R.id.imageButton2); 
ib2.setImageBitmap(image); 
+0

यह अच्छा है लेकिन 'छवि' चर कहाँ से आया था? संभवतः आप इसे किसी भी तरह से 'है' से प्राप्त करते हैं? –

+0

आप इनपुट स्ट्रीम से छवि बना सकते हैं ... बिटमैप छवि = बिटमैपफैक्टरी.decodeStream (है); – CoPLaS

संबंधित मुद्दे