(cross-posting my answer da una domanda StackOverflow identico)
Una possibilità è la creazione di schermi in questo modo:
C 'ABCA'
C' sembra proprio come C, ma quando scorri fino a lì, ti fa passare al vero C. A 'sembra proprio come A, ma quando scorri fino a lì, ti passa al vero A.
Lo farei implementando onPageScrollStateChanged in questo modo:
@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);
}
}
}
Si noti che questo chiama la forma alternativa di setCurrentItem e passa false
a causare il salto per accadere immediatamente, piuttosto che come una pergamena liscia.
Ci sono due principali inconvenienti che vedo a questo. In primo luogo, al raggiungimento di entrambe le estremità l'utente deve lasciare che lo scrolling si stabilizzi prima di poter andare oltre. In secondo luogo, significa avere una seconda copia di tutte le visualizzazioni nella prima e nell'ultima pagina. A seconda di quanto siano pesanti le risorse degli schermi, ciò potrebbe escludere questa tecnica come possibile soluzione.
Si noti inoltre che poiché il pager della vista non consente ai clic di passare ai controlli sottostanti fino a quando lo scorrimento non si è risolto, è probabile che non sia impostato alcun clicklistener e simili per i frammenti A 'e C'.
Modifica: Avendo ora implementato questo da solo, c'è un altro svantaggio piuttosto importante. Quando passa da A 'a A o C' a C, lo sfarfallio dello schermo per un momento, almeno sul mio attuale dispositivo di test.
È possibile controllare [questo tutorial] (http://thedeveloperworldisyours.com/android/carousel-viewpager/#sthash.rtkOS5m2.J9bGU21I .dpbs) e questo [esempio in GitHub] (https://github.com/thedeveloperworldisyours/CarouselViewPager) – Cabezas