2011-10-14 12 views
21

मेरे पास एक यूआई है जहां रूट लेआउट एक रिलेटिव लयआउट है। इसमें फ़ील्ड, बटन इत्यादि जैसे कई दृश्य हैं,एंड्रॉइड के सेट ड्रॉइंग कैशएनेबल() कैसे काम करता है?

दो अन्य पैनल भी हैं जो प्रारंभ में अदृश्य हैं। जब उपयोगकर्ता बटन पर क्लिक करता है, तो इनमें से एक पैनल बाईं ओर से स्लाइड करता है, नीचे से एक और स्लाइड्स। समस्या यह है कि फ्रेम दर नेक्सस एस

पर दयनीय है, मैं इन दो पैनलों की एनीमेशन को तेज करने के लिए सेटडॉइंग कैशएनेबल (सत्य) का उपयोग करना चाहता हूं। सरलीकृत उदाहरण के रूप में, यहां लगभग मोटे तौर पर मैं इन पैनलों में से एक में कैसे स्लाइड करता हूं। मैं इसे "विस्तार पैनेल" कहूंगा।

public class MyActivity extends Activity { 
    // Initially invisible. 
    private View detailPanel; 

    // A simple slide animation. 
    private Animation detailEnterAnimation; 

    ... 

    public void someButtonClicked(View view) { 
    detailPanel.startAnimation(detailEnterAnimation); 
    detailPanel.setVisibility(View.VISIBLE); 
    detailPanel.setDrawingCacheEnabled(true); 
    } 
} 

अब विस्तार पत्र में मैं कैश का उपयोग करने की कोशिश करता हूं। मुझे उम्मीद थी कि कैश के माध्यम से बिटमैप प्रतिपादन प्रदर्शन में सुधार होगा:

public class DetailPanel extends LinearLayout { 
    public void draw(Canvas canvas) { 
    Bitmap cache = getDrawingCache(); 
    if (cache != null) { 
     canvas.drawBitmap(cache, 0, 0, null); 
    } else { 
     super.draw(canvas); 
    } 
    } 
} 

बिटमैप में गैर-शून्य है और सही आकार है, लेकिन यह पूरी तरह से काला है।

मेरा बिटमैप काला क्यों है? वह कोड अजीब गलत हो सकता है; मैंने दस लाख अलग-अलग चीजों की कोशिश की है और इसे समझ नहीं सकता है।

+0

क्या आपने स्लाइडिंग ड्रावर को विस्तारित करने का प्रयास किया था? यह पहले से ही स्लाइडिंग एनीमेशन है। –

+0

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

+0

शायद यह सही दिशा में कुछ है: http://android-developers.blogspot.com/2009/01/why-is-my-list-black-android.html – MrJre

उत्तर

2

आप इसे उपयोग करने से पहले अपने ड्राइंग कैश का निर्माण करना चाहते हो सकता है, अन्यथा यह आपको एक खाली बिटमैप

public void someButtonClicked(View view) { 
    detailPanel.startAnimation(detailEnterAnimation); 
    detailPanel.setVisibility(View.VISIBLE); 
    detailPanel.setDrawingCacheEnabled(true); 
    detailPanel.buildDrawingCache(); //may be you need to add this? 
    } 
5

Android दस्तावेज़ से (http://developer.android.com/reference/android/view/View.html#setDrawingCacheEnabled%28boolean%29) दे देंगे:

ड्राइंग संचय को सक्षम करने के लिए समान है हार्डवेयर त्वरण बंद होने पर परत स्थापित करने के लिए। जब हार्डवेयर त्वरण चालू होता है, तो ड्राइंग कैश को सक्षम करने से प्रतिपादन पर कोई प्रभाव नहीं पड़ता है क्योंकि सिस्टम त्वरण के लिए एक अलग तंत्र का उपयोग करता है जो ध्वज को अनदेखा करता है। यदि आप दृश्य के लिए बिटमैप का उपयोग करना चाहते हैं, तब भी जब हार्डवेयर त्वरण सक्षम होता है, तो सॉफ़्टवेयर और हार्डवेयर परतों को सक्षम करने के तरीके के बारे में जानकारी के लिए setLayerType (int, android.graphics.Paint) देखें।

शायद यह आपका मामला है?

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