2012-04-15 8 views
5

में काम नहीं कर जब मैं एक विजेट मैं इस प्रयोग किया जाता है पर एक बिटमैप डाल करने के लिए प्रयास करें:setImageViewBitmap एंड्रॉयड विजेट

theBitmap = Bitmap.createBitmap(WW, HH, 
      Bitmap.Config.ARGB_8888); 
. 
. 
// draw something using a canvas 
. 
. 
rviews.setImageViewBitmap(R.id.time,theBitmap); 

यह मेरे फोन पर लेकिन मेरे गैलेक्सी टैबलेट या गैलेक्सी नोट पर नहीं काम करता है,

अगर मैं नकल theBitmap एक नया ARGB_4444 में तो यह सभी उपकरणों पर काम करता है:

Bitmap clone= theBitmap.copy(Bitmap.Config.ARGB_4444, false); // workaround 
rviews.setImageViewBitmap(R.id.time, clone); 
+0

क्या यह वही हो सकता है: http://code.google.com/p/android/issues/detail?id=8489? – Heinrisch

+0

हाँ, मैंने इसे पहले देखा था, लेकिन गुणवत्ता और पारदर्शिता के कारण मुझे ARGB_8888 की आवश्यकता है। – AVEbrahimi

+0

आपको शायद कम डेटा भेजने की आवश्यकता होगी, जिसका मतलब है कि एक छोटी या डाउनस्प्लेड छवि, या इसके बजाय छवि को यूआरआई पास करें। – wsanville

उत्तर

6

पहले, w अपने वैकल्पिक हल ithout, के लिए अपने logcat उत्पादन की जाँच करें:

ERROR/JavaBinder(20204): !!! FAILED BINDER TRANSACTION !!! 

आप शायद आईपीसी लेनदेन है कि RemoteViews पदानुक्रम में अपने परिवर्तन धारण के लिए फ़ाइल आकार की सीमा कम पड़ रहा है।

जब आप Bitmap.Config.ARGB_4444 config साथ बिटमैप कॉपी, प्रत्येक पिक्सेल, 2 बाइट्स के साथ प्रतिनिधित्व किया जाएगा जबकि Bitmap.Config.ARGB_8888 (2.3 और ऊपर पर डिफ़ॉल्ट config) प्रत्येक पिक्सेल 4 बाइट [Source] है।

अपने कामकाज का उपयोग करके, आप आधे से अधिक डेटा पास कर रहे हैं, और इस प्रकार, आकार सीमा से निचोड़ते हैं। This post बताता है कि आकार सीमा 1 एमबी है, लेकिन मुझे यकीन नहीं है कि यह प्रति ओएस संस्करण या निर्माता के अनुसार बदलता है।

अद्यतन: छवि को पारित करने के लिए एक अलग दृष्टिकोण बिटमैप को स्वयं नहीं भेजना होगा, बल्कि डिस्क पर फ़ाइल में यूआरआई पास करना होगा। फिर, आपको यह सुनिश्चित करने की ज़रूरत है कि अन्य प्रक्रियाओं में आपकी फ़ाइल तक पहुंच होगी (लॉन्चर उदाहरण के लिए एक अलग प्रक्रिया में चलाएगा)। यदि आप अपनी /data/data/my.package.name/ निर्देशिका में फ़ाइलों को लिख रहे हैं, तो आप इसे MODE_WORLD_READABLEContext.openFileOutput() पर निर्दिष्ट करके कर सकते हैं। उदाहरण के लिए:

remoteViews.setUri(R.id.time, "setImageURI", Uri.fromFile(file)); 
+1

वह सेटयूरी एक आकर्षण की तरह काम करता है। – Grimmace

+0

सेटयूरी ने वास्तव में मेरी मदद की। महान सलाह ... धन्यवाद! – tronious