2012-07-25 6 views
19

ViewPager और ऑफस्क्रीन पेज सीमा के सामान्य व्यवहार को बाईपास करने का कोई तरीका है? मेरा ViewPager में चार fragments शामिल हैं, जिनमें से प्रत्येक में छवियों का gridview है। मेरी समस्या यह है कि ViewPager के इंस्टेंसेशन पर, दो fragments बनाए गए हैं, जिसके परिणामस्वरूप लगभग 20 छवियां (लगभग 10 प्रति टुकड़े) को एक साथ पकड़ने से डाउनलोड/लाया जाता है। क्या ऑफस्क्रीन पेज सीमा को अक्षम करना संभव है?ViewPager ऑफ़स्क्रीन पेज सीमा

मेरा लक्ष्य केवल छवियों को डाउनलोड करना है जब fragment चयनित है, या केवल जब उपयोगकर्ता छवि को घुमा रहा है। इसे प्राप्त करने का एक तरीका onPageSelected श्रोता का उपयोग करना और ध्वज सेट करना है, जो GridViewAdapter को बताता है कि इसे छवि डाउनलोड करने की अनुमति है या नहीं।

एक दूसरा तरीका है कि मैं के बारे में सोच सकते हैं ImageView पर एक HoverListener स्थापित करने के लिए, और केवल onHover पर छवि डाउनलोड है, लेकिन है कि श्रोता 4.0 और बाद में ही उपलब्ध है।

क्या यह हासिल करने का कोई बेहतर तरीका है?

उत्तर

32

यह गुप्त पृष्ठों की सीमा निष्क्रिय करने के लिए संभव है?

नहीं। यह पहले से ही न्यूनतम संभव मूल्य पर सेट है: देखे गए पृष्ठ के प्रत्येक पक्ष में एक पृष्ठ। एनीमेशन प्रभाव काम करना आवश्यक है - आप एक ही समय में दो टुकड़ों (मूल और नए) के कुछ हिस्सों को देखते हैं।

मेरा लक्ष्य केवल तभी चित्रों को डाउनलोड करना है जब एक टुकड़ा चुना जाता है, या केवल जब उपयोगकर्ता छवि को घुमाता है।

फिर प्लेसहोल्डर छवियों के साथ अपना ग्रिड लोड करें, और पृष्ठ बदल जाने तक असली छवियों को लोड न करें।

यह भी ध्यान दें कि "होवर" का मतलब कुछ प्रकार के माउस या इसी तरह के पॉइंटर का है, जिसका उपयोग अधिकांश एंड्रॉइड डिवाइसों पर नहीं किया जाता है।

+0

पर काम नहीं कर रहा है मैंने ऑफस्क्रीन को 1 पर सेट किया है लेकिन स्क्रीन से बनी हुई टुकड़ा एक Google समर्थन नक्शा खंड है जब पहली बार बनने के बाद मैप आता है और मेरे टुकड़े को ओवरलैप करता है, कोई विचार क्यों? –

+0

@IgnacioGarat: ऑफस्क्रीन सीमा के साथ ऐसा करने के लिए कुछ भी नहीं होना चाहिए। लगता है जैसे कुछ आपके 'पेजर एडाप्टर' के साथ सही ढंग से काम नहीं कर रहा है। – CommonsWare

26

बस ऑफस्क्रीन सीमा को एक पर सेट करें।

ViewPager mViewpager = (ViewPager)findView.... 
mViewPager.setOffscreenPageLimit(1); 
+37

यह हो जाता है पहले से ही डिफ़ॉल्ट रूप से सेट कर सकते हैं को स्क्रॉल किए बिना चित्र डाउनलोड करने से बचने के लिए। – Wayne

+0

मैंने यह कोशिश की, यह – rahul

2

हैंडल viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()

यह अंदर, हटाने अतिरिक्त दृश्य position + 1 के बाद और position - 1 से पहले viewPager.removeViewAt(int) का उपयोग कर (यानी पेजर की सीमा केवल 3 पृष्ठ लोड करने के लिए:। वर्तमान, पिछले और अगले

तो फिर तुम destroyItem संभाल चाहिए viewpager अनुकूलक में, recycle() नष्ट ध्यान में रखते हुए बिटमैप्स ing।

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    LinearLayout layout = (LinearLayout) object; 
    ((ViewPager) container).removeView(layout); 
    ImageView imgDisplay = (ImageView) layout.findViewById(R.id.quranPage); 
    Drawable drawable = imgDisplay.getDrawable(); 
    if (drawable instanceof BitmapDrawable) { 
     BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; 
     Bitmap bitmap = bitmapDrawable.getBitmap(); 
     if (bitmap != null) //when reading page fails, this will be null 
      bitmap.recycle(); 
    } 
} 
2

मेरा लक्ष्य केवल चित्र डाउनलोड करने के लिए जब एक टुकड़ा का चयन किया जाता

आप अपने ViewPager में टुकड़ा की setUserVisibleHint(boolean isVisibleToUser) कॉलबैक का उपयोग कर सकते है।

3

आप Android डाटा बाइंडिंग का उपयोग कर xml में ऐसा कर सकते हैं:

<android.support.v4.view.ViewPager 
    [...] 
    app:offscreenPageLimit="@{1}" 
    [...] 
</android.support.v4.view.ViewPager> 
0

mViewPager.setOffscreenPageLimit(1); अभ्यस्त यह पड़ोसी टुकड़ा लोड होगा अगर इसके पहले से ही लोड नहीं देना आप क्या चाहते हैं, (इसका मतलब है कि यह 2 टुकड़ा लोड होगा)।

आइए कहें कि क्या आप एक बार में अपने सभी टुकड़े (4 टुकड़े) को लोड करना चाहते हैं, तो केवल setOffscreenPageLimit(3) का उपयोग करें, अन्यथा setOffscreenPageLimit का उपयोग करने से बचें।

मुझे लगता है कि आप व्यूअर लोडर पड़ोसी टुकड़े को लोड करने वाले डिफ़ॉल्ट व्यवहार को नहीं बदल सकते हैं।

0

उपयोगकर्ता वास्तव में टुकड़ा आप "setUserVisibilityHint (बूलियन visibleToUser)" ओवरराइड और आपकी छवियाँ डालते ही अगर "visibleToUser" सच