(publicación cruzada my answer a partir de una pregunta StackOverflow idéntica)
Una posibilidad es la creación de las pantallas de la siguiente manera:
C 'ABCA'
C' se parece a C, pero cuando se desplaza hasta allí, lo cambia a la real C. A 'se parece a A, pero cuando se desplaza hasta allí, lo cambia al real A.
Haría esto implementando onPageScrollStateChanged 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);
}
}
}
Tenga en cuenta que esto requiere la forma alternativa de setCurrentItem y pasa false
para causar el salto a suceder al instante y no como un desplazamiento suave.
Hay dos inconvenientes principales que veo en esto. En primer lugar, al llegar a cualquiera de los extremos, el usuario tiene que dejar que el desplazamiento se asiente antes de que pueda avanzar. En segundo lugar, significa tener una segunda copia de todas las vistas en su primera y última página. Dependiendo de la carga de recursos de sus pantallas, puede descartar esta técnica como una posible solución.
Tenga en cuenta también que dado que el buscapersonas no permite que los clics pasen a los controles subyacentes hasta que se haya establecido el desplazamiento, es probable que no configure clicklisteners y similares para los fragmentos A 'y C'.
Editar: Ahora que lo he implementado, hay otro inconveniente bastante importante. Cuando cambia de A 'a A o C' a C, la pantalla parpadea por un momento, al menos en mi dispositivo de prueba actual.
Usted puede comprobar [tutorial] (http://thedeveloperworldisyours.com/android/carousel-viewpager/#sthash.rtkOS5m2.J9bGU21I .dpbs) y este [ejemplo en GitHub] (https://github.com/thedeveloperworldisyours/CarouselViewPager) – Cabezas