2010-05-12 11 views
13

मैं एंड्रॉइड 2.1 के साथ काम कर रहा हूं और निम्न समस्या है: विधि का उपयोग View.getDrawingCache() हमेशा शून्य देता है। getDrawingCache() को बिटमैप वापस करना चाहिए, जो दृश्य की सामग्री की प्रस्तुति है।एंड्रॉइड 2.1 देखें getDrawingCache() विधि हमेशा शून्य

उदाहरण कोड:

public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    final View view = findViewById(R.id.ImageView01); 
    view.setDrawingCacheEnabled(true); 
    view.buildDrawingCache(); 
    final Bitmap bmp = view.getDrawingCache(); 
    System.out.println(bmp); 

}

मैं पहले से ही ड्राइंग कैश (जैसे View.setWillNotDraw(boolean) और View.setWillNotCacheDrawing(boolean)) पैदा करने के लिए देखें वस्तु कॉन्फ़िगर करने के लिए अलग अलग तरीकों की कोशिश की है, लेकिन कुछ भी काम करता है।

सही तरीका क्या है, या मैं क्या गलत कर रहा हूं?

पीएस: वास्तविक कोड में मैं रिलेवेटिवआउट जैसे व्यू ग्रुप पर getDrawingCache() को लागू करना चाहता हूं। क्या व्यू ग्रुप का उपयोग करते समय व्यवहार समान होता है?

+0

मुझे 2.1 में एक ही समस्या मिलती है, 2.2 बिटमैप को ठीक से बचाता है। –

+0

यह काम करना चाहिए - http://stackoverflow.com/questions/11560882/call-to-getdrawingcache-fails-on-api-8- हर समय – Ronnie

उत्तर

0

जहां तक ​​मैंने प्रलेखन में अंतिम दिनों को पढ़ा है, आपको केवल setDrawingCacheEnabled या buildDrawingChache() दोनों को नहीं करना चाहिए, बल्कि दोनों नहीं।

+0

मुझे पता है, कि setDrawingCacheEnabled और buildDrawingChache अनावश्यक है। setDrawingCacheEnabled बल ड्रॉइंग कैश को मांग और निर्माण पर बनाने के लिए ड्रॉइंग चाचे सक्षम-ध्वज सेट किए बिना कैश बनाता है। लेकिन यह मेरे लिए काम नहीं करता है - न ही ध्वज सेट करने के लिए, न ही स्पष्ट कॉल बिल्डिंग ड्रॉइंगचैच का उपयोग करके ध्वज सेट किए बिना। – Impression

5

उपयोग

onLayout(x, y, width, height); 
पूर्व के लिए

:

onLayout(0, 0, 100, 100); 

getDrawingCache

+0

thx ... जो काम करता है – Impression

+1

या तो काम नहीं करता है: टाइपरलायआउट प्रकार से विधि (लोलियन, int, int, int, int) पर विधि –

+3

दिखाई नहीं देती है: layout.layout (0, 0, wt, ht); –

17
Bitmap screenshot; 
view.setDrawingCacheEnabled(true); 
screenshot = Bitmap.createBitmap(view.getDrawingCache()); 
view.setDrawingCacheEnabled(false); 

कॉल करने से पहले आप बिटमैप जहाँ से संदर्भ getDrawingCache() द्वारा प्राप्त होता है पुनर्नवीनीकरण हो जाता है के रूप में Bitmap.createBitmap(view.getDrawingCache()); की जरूरत है।

+4

मेरे लिए काम नहीं करता है! कहते हैं: स्रोत Bitmap.createBitmap() पर शून्य है –

2

इन चीजों को कभी भी तैयार न करें! आप इसे View.onClickListener या अन्य स्थान पर कर सकते हैं।

0

एक ही समस्या थी और अंत में यह आंशिक रूप से मेरे लिए काम करता है:

view.layout(0, 0, 1000, 100); 
Bitmap b = view.getDrawingCache(); 
try { 
    b.compress(CompressFormat.JPEG, 95, 
    new FileOutputStream(Environment.getExternalStorageDirectory()               + "/folder/name.jpg")); 
catch (FileNotFoundException e) { 
    Log.e(LOGTAG, "error:" + e.getMessage()); 
    } 

केवल समस्या यह है, कि मैं मेरे विचार से भरा आयाम नहीं मिल सकता है। view.getwidth शून्य वापस आता है ...

0

जांचें कि आपका दृश्य स्क्रीन आकार से बड़ा नहीं है या नहीं। मैं पढ़ अन्य डेवलपर्स के लिए अलग बस एक के रूप में इस मिल गया और) मेरे विचार के आयामों हां, तो अब यह काम करता है = Android get full View as Bitmap

2

मैं जानता हूँ कि यह आपके प्रश्न का उत्तर नहीं है प्रयोग किया, लेकिन ....

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

आपको इसकी आवश्यकता क्यों होगी? मेरी राय में कैनवास वर्ग में एक निरीक्षण है। कैनवास वर्ग आपको कैनवास सामग्री को पढ़ने और उसके पीछे बिटमैप पर जाने का कोई तरीका नहीं देता है। इसलिए यदि आपको कभी भी बिटमैप से पढ़ने की आवश्यकता है, उदाहरण के लिए दृश्य सामग्री के एक छवि डंप को प्राप्त करने के लिए, ऊपर वर्णित विधि के अलावा, ऐसा करने का कोई तरीका नहीं है।

यह मूल रूप से इस धागे में वर्णित सापेक्ष दृश्य समस्या के लिए काम नहीं करेगा, लेकिन यह नए एंड्रॉइड डेवलपर्स के लिए रुचि हो सकता है।

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