2012-07-12 5 views
10

की स्थापना मैं जो एक पिन किया गया हेडर शामिल है एक कस्टम ListView है, और x "पुश-अप" विचारों, जो धक्का दिया जा सकता है और सूची दृश्य के ऊपर छिपा की मात्रा।पिन किया हैडर के साथ कस्टम ListView, Jank के कारण जब गद्दी

मैंने उन्हें समझाने के लिए छवि संलग्न की है। ग्राहकों को लोगो लोगो को छिपाने के लिए "ब्लैक सेंसरशिप" के लिए खेद है।

मेरी समस्या यह है कि यदि मैं पिन किए गए शीर्षलेख दृश्य में पैडिंग जोड़ता हूं, तो मुझे इसके पीछे फ़्लोटव्यू आइटम मिलेंगे।

पिन किए गए हेडर व्यू को उसी तकनीक के साथ कार्यान्वित किया गया है, जैसा कि आप पाएंगे यदि आप PinnedHeaderListView, यानी एक स्थिर दृश्य और सूचीदृश्य में शीर्षलेख खोजते हैं।

मुझे पैडिंग को सक्षम करने का एक तरीका मिला है, और यह वास्तविक सूची दृश्य में पिन किए गए शीर्षलेख के समान पैडिंग लागू कर रहा है, लेकिन केवल तभी जब स्थिर शीर्षलेख दिखाई देता है।

हालांकि, सेटपैडिंग की कॉलिंग एक काफी दिखाई देने वाली जंक का कारण बनती है जिसे मैं निकालना चाहता हूं। क्या किसी को यह पता है कि इस जंक को कैसे हटाया जाए?

मेरे पास साधारण विचारों और डमी डेटा के साथ एक सरल अनुप्रयोग है, जो इस जंक को नहीं दिखाता है, इसलिए शायद जंक की मात्रा सेल लेआउट की जटिलता पर निर्भर करती है।

private void updateIfShouldShowStaticHeaderView() { 

    //unfortunately setting the padding of the listView causes JANK. 

    //any ideas? 
    int bottomOfFloatingHeader = floatingHeader.getBottom(); 
    if (bottomOfFloatingHeader < mHeaderViewHeight) { 
     staticHeaderViewIsVisible = true; 
     staticHeader.setVisibility(View.VISIBLE); 

     //need to set padding of listView to avoid having list-view items float behind my padded static header 
     setPadding(0, staticHeader.getPaddingTop(), 0, getPaddingBottom()); 
    } else { 
     staticHeaderViewIsVisible = false; 
     staticHeader.setVisibility(View.INVISIBLE); 
     //need to set padding of listView to avoid having list-view items float behind my padded static header 
     setPadding(0, 0, 0, getPaddingBottom()); 
    } 
} 

यहाँ सबसे पहले यहाँ दिखा कैसे चीजें गद्देदार स्थिर पिन किए गए दृश्य के पीछे तैयार हो जाओ एक छवि है धक्का दे दिया-अप हेडर showing the pushed-up headers

दिखा छवि है। यह ध्यान देने योग्य है कि अगर मैं सूची दृश्य के पैडिंग को समायोजित करता हूं तो यह इरादे से काम करता है, लेकिन जब मैं स्थिर शीर्षलेख दृश्य को चालू/बंद करता हूं तो मुझे जंक (मंदी) मिल जाएगी।

showing the error that is visible if I do not adjust padding

+5

बहुत अच्छा छवियों, शांत कला काम :) –

+0

plz इसे अपने प्रश्न से बाहर है, लेकिन क्या आप मुझे बता कैसे यू अपने सूचीदृश्य और आवेदन लेआउट का आयोजन किया था के लिए +1? – Angelika

उत्तर

0

कोशिश के लिए ListView लेआउट-कॉल का कारण होगा पर setPadding बाद से, यह विशेष रूप से जटिल ListView कोशिकाओं के साथ मामलों में बहुत ineffecient हो जाएगा। एक समाधान है कि पृष्ठभूमि ग्राफिक को पिन किए गए शीर्षलेख में जोड़ना जो आवश्यक पैडिंग का प्रतिनिधित्व करता है। इसका मतलब है कि पूरे पिन किए गए हेडर ठोस हैं। सूची-दृश्य के तत्व तब इस ग्राफिक्स के पीछे खींचे जाएंगे। यह वह समाधान है जिसके साथ हम समाप्त हुए।

यह काम करता है, लेकिन सूची दृश्य को क्लिप करना बेहतर होगा।

1

अपने प्रश्न पर कुछ अधिक जानकारी की आवश्यकता है।

मेरी समझ के साथ जंक बड़ी मात्रा में डेटा और ड्रॉइंग के कारण है जिसका आप उपयोग कर रहे हैं।

अपने दृश्य के लिए हार्डवेयर त्वरण को सक्षम करने का प्रयास करें।

HW त्वरण के बारे में अधिक इस http://developer.android.com/guide/topics/graphics/hardware-accel.html

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