2012-02-13 21 views
5

मैं बस इतना करना चाहता हूं कि एंड्रॉइड में एक क्षैतिज कैरोसेल है। के लिए> एकैरोसेल ViewPager कैसे बनाएं?

GTalk -> बी, बी < - -> सी, सी <

अगर मैं 3 स्क्रीन एबी और सी है तो मैं अपने ViewPager मुझे एक < की तरह ले जाने के लिए अनुमति देना चाहते हैं एंड्रॉइड की वार्तालाप इस तरह से स्विच किया जा सकता है। सैमसंग की होमस्क्रीन और एप्लिकेशन स्क्रीन इस तरह स्विच की जा सकती है।

ए बी और सी टुकड़े हैं और मैं एक एडाप्टर का उपयोग कर रहा हूं जो FragmentPagerAdapter को बढ़ाता है। सभी टुकड़ों में एक वेबदृश्य होगा।

मैंने herehere देखा है और यहां पर कोई भी ऐसा नहीं कर रहा है जो मैं चाहता हूं।

क्या कोई मुझे सही दिशा में मार्गदर्शन कर सकता है?

+0

आप देख सकते हैं [इस ट्यूटोरियल] (http://thedeveloperworldisyours.com/android/carousel-viewpager/#sthash.rtkOS5m2.J9bGU21I .dpbs) और यह [गिटहब में उदाहरण] (https://github.com/thedeveloperworldisyours/CarouselViewPager) – Cabezas

उत्तर

0

लागू getItem(int position) इस तरह:

public Fragment getItem(int position) 
{ 
    switch(position) 
    { 
     case 0: 
     Fragment A = new A(); 
     return A; 
     case 1: 
     Fragment B = new B(); 
     return B; 
     same for C.... 
    } 
} 

आप भी यहां पर एक नजर है कर सकते हैं: SimpleViewPager .. स्रोत डाउनलोड करने और यह समझते हैं। आशा करता हूँ की ये काम करेगा।

+0

मुझे पता है कि ViewPager कैसे बनाएं। मैं जानना चाहता हूं कि इसे लूप कैसे बनाया जाए। स्क्रीन की तरह बी से सी बी को फिर से वापस करने के लिए। – Enigma

+0

क्षमा करें, मैंने सोचा कि आप व्यूपर के बारे में पूछ रहे हैं। – Farhan

3

एक (एक समान StackOverflow सवाल से पार पोस्टिंग my answer) संभावना इस तरह स्क्रीन स्थापित कर रही है:

सी 'ABCA'

सी 'सिर्फ सी की तरह लग रहा है, लेकिन जब आप वहां स्क्रॉल करते हैं, यह आपको वास्तविक सी पर स्विच करता है। ए 'ए की तरह दिखता है, लेकिन जब आप वहां स्क्रॉल करते हैं, तो यह आपको वास्तविक ए

पर लागू करता है Iलागू करके ऐसा करता हूंतो जैसे:

@Override 
public void onPageScrollStateChanged (int state) { 
    if (state == ViewPager.SCROLL_STATE_IDLE) { 
     int curr = viewPager.getCurrentItem(); 
     int lastReal = viewPager.getAdapter().getCount() - 2; 
     if (curr == 0) { 
      viewPager.setCurrentItem(lastReal, false); 
     } else if (curr > lastReal) { 
      viewPager.setCurrentItem(1, false); 
     } 
    } 
} 

ध्यान दें कि यह setCurrentItem की वैकल्पिक रूप कॉल और false गुजरता कूद तुरन्त बल्कि एक चिकनी स्क्रॉल के रूप में की तुलना में ऐसा करने के लिए पैदा करने के लिए।

इसमें दो मुख्य दोष हैं जिन्हें मैं देखता हूं। सबसे पहले, किसी भी अंत तक पहुंचने पर उपयोगकर्ता को आगे बढ़ने से पहले स्क्रॉलिंग को व्यवस्थित करना होगा। दूसरा, इसका मतलब है कि आपके पहले और अंतिम पृष्ठ में सभी विचारों की दूसरी प्रतिलिपि है। इस पर निर्भर करता है कि आपकी स्क्रीन कितनी संसाधन-भारी है, जो इस तकनीक को संभावित समाधान के रूप में रद्द कर सकती है।

ध्यान दें कि चूंकि दृश्य पेजर स्क्रॉलिंग के निपटारे के बाद तक अंतर्निहित नियंत्रणों तक क्लिक नहीं करता है, इसलिए शायद क्लिकलिस्टर्स और ए 'और सी' टुकड़ों की तरह सेट करना ठीक नहीं है।

संपादित करें: अब इसे स्वयं लागू करने के बाद, एक और सुंदर बड़ी कमी है। जब यह ए 'से ए या सी' से सी तक स्विच करता है, तो कम से कम मेरे वर्तमान परीक्षण डिवाइस पर स्क्रीन एक पल के लिए झिलमिलाहट करता है।

+0

मैंने पहले ही यह कोशिश की है। अन्य अतिरिक्त समस्याएं हैं। यदि ए में कुछ दृश्य बदल गया है तो ए को भी इसे प्रतिबिंबित करना चाहिए। जैसे कि आपने ए में स्क्रॉल किया है और फिर यदि आप ए पर जाते हैं तो यह आपको एक सेकंड के लिए अनसुलझा स्क्रीन दिखाएगा और फिर झिलमिलाहट का कारण बन जाएगा। – Enigma

1

ViewPager सेटिंग्स:

mViewPager = (ViewPager) findViewById(R.id.view_pager); 
    mViewPager.setAdapter(new YourPagerAdapter(getSupportFragmentManager())); 
    //Set the number of pages that should be retained to either side of the current page. 
    mViewPager.setOffscreenPageLimit(1); 
    mViewPager.setCurrentItem(50); 

FragmentPagerAdapter:

public class YourPagerAdapter extends FragmentPagerAdapter { 
    final int PAGE_COUNT = 100; 
    final int REAL_PAGE_COUNT = 3; 

    public YourPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     while (position > REAL_PAGE_COUNT - 1) { 
      position = position - REAL_PAGE_COUNT ; 
     } 

     switch (position) { 
      case 0: 
       return FirstFragment.newInstance(position); 
      case 1: 
       return SecondFragment.newInstance(position); 
      case 2: 
       return ThirdFragment.newInstance(position); 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return PAGE_COUNT; 
    } 
}