Cómo cambiar automáticamente entre las páginas de viewPager

Tengo una aplicación de Android que emplea un ViewPager con dos páginas Cuando la primera actividad muestra me gustaría presentar cada página a su vez al usuario para que sepan que pueden pasar entre dos vistas. No he encontrado ningún documento que describa cómo hacer esto. He descubierto PageTransformations que sonaba prometedor pero el usuario tiene que deslizar primero. Necesito mis dos páginas para desplazarse automáticamente tan pronto como se muestre la primera página en el ViewPager. ¿Cómo puede lograr el resultado deseado?

Puede utilizar el Timer para este propósito. El siguiente código se explica por sí mismo:

 // --------------------------------------------------------------------------- Timer timer; int page = 1; public void pageSwitcher(int seconds) { timer = new Timer(); // At this line a new Thread will be created timer.scheduleAtFixedRate(new RemindTask(), 0, seconds * 1000); // delay // in // milliseconds } // this is an inner class... class RemindTask extends TimerTask { @Override public void run() { // As the TimerTask run on a seprate thread from UI thread we have // to call runOnUiThread to do work on UI thread. runOnUiThread(new Runnable() { public void run() { if (page > 4) { // In my case the number of pages are 5 timer.cancel(); // Showing a toast for just testing purpose Toast.makeText(getApplicationContext(), "Timer stoped", Toast.LENGTH_LONG).show(); } else { mViewPager.setCurrentItem(page++); } } }); } } // --------------------------------------------------------------------------- 

Nota 1: Asegúrese de llamar pageSwitcher método pageSwitcher después de configurar el adapter en el viewPager correctamente dentro del método onCreate de su actividad.

Nota 2: El viewPager se desliza cada vez que lo inicie. Tienes que manejarlo para que pasea por todas las páginas sólo una vez (cuando el usuario está viendo la primera vez viewPager )

Nota 3: Si además desea ralentizar la velocidad de desplazamiento del viewPager , puede seguir esta respuesta en StackOverflow.


Dime en los comentarios si eso no podría ayudarte …

La pregunta es vieja, pero espero que ayude a alguien Mi solución con Runnable

Respuesta corta

 Runnable runnable = new Runnable() { public void run() { if (myAdapter.getCount() == page) { page = 0; } else { page++; } viewPager.setCurrentItem(page, true); handler.postDelayed(this, delay); } }; 

Respuesta larga Uso en una actividad

 public class activity extends AppCompatActivity { private Handler handler; private int delay = 5000; //milliseconds private ViewPager viewPager; private int page = 0; private MyAdapter myAdapter; Runnable runnable = new Runnable() { public void run() { if (myAdapter.getCount() == page) { page = 0; } else { page++; } viewPager.setCurrentItem(page, true); handler.postDelayed(this, delay); } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler = new Handler(); viewPager = (ViewPager) findViewById(R.id.viewPager); myAdapter = new MyAdapter(getSupportFragmentManager()); viewPager.setAdapter(myAdapter); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { page = position; } @Override public void onPageScrollStateChanged(int state) { } }); } @Override protected void onResume() { super.onResume(); handler.postDelayed(runnable, delay); } @Override protected void onPause() { super.onPause(); handler.removeCallbacks(runnable); } } 

He creado un proyecto de código abierto en github , que implementa un desplazamiento automático ViewPager, diagrama de ejemplo a continuación: Auto srcoll viewPager

utilizar

 <cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

reemplazar

 <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

Llamada startAutoScroll() para iniciar el desplazamiento automático.

stopAutoScroll() para detener el desplazamiento automático.

Más: https://github.com/Trinea/android-auto-scroll-view-pager

Puede utilizar setCurrentItem para cambiar la página

Si desea autoplay páginas de viewpager, pero sobre todo la solución es correcta, pero después de autoplay primer artículo consumir tiempo de retraso, pero es incorrecto después de que el elemento actual de autoplay cambiar rápidamente. Estoy agregando mi código abajo está funcionando correctamente autoplay / pause.

  @Override public void onClick(View v) { if (!isAutoPlay) { img_autoplay.setImageResource(R.drawable.pause); int currentcount = getModel().getCurrentIndex(); currentcount++; getMainImage().setCurrentItem(currentcount); autoPlay(getMainImage()); isAutoPlay = true; } else { img_autoplay.setImageResource(R.drawable.auto_play); isAutoPlay = false; } } }); 

Y aquí está el método:

  viewPager.postDelayed(new Runnable() { @Override public void run() { try { if (myAdapter != null && viewPager.getAdapter().getCount() > 0 && isAutoPlay) { getWindow().addFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); int currentcount = getModel().getCurrentIndex(); currentcount++; viewPager.setCurrentItem(currentcount); if (getModel().isLastCard()) { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { isAutoPlay = false; packFinished(); getWindow() .clearFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }, 6000); } autoPlay(viewPager); } } catch (Exception e) { } } }, 6000); 

Debajo del método se utiliza cambiar las páginas automáticamente después de un cierto tiempo (usted puede modificar tiempo según su requisito)

  private void timer() { timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { if (currentPage == NUM_PAGES - 1) { currentPage = 0; } view.setCurrentItem(currentPage++, true); } }); } }, 500, 5000); } 
  • La imagen no se muestra en ImageViewZoom
  • ¿Alguien sabe cómo usar PagerTitleStrip en Android
  • ViewPager, PagerAdapter y Bitmap causan pérdida de memoria (OutOfMemoryError)
  • El PageAdapter de ViewPager se restablece en el cambio de orientación
  • Android.support.v4.app.Fragment.setUserVisibleHint puntero nulo en la reanudación de la aplicación
  • Animación de visor de Android
  • Endless ViewPager android
  • Insertar páginas en el medio de un FragmentPageAdapter
  • Android ViewPager con RecyclerView funciona incorrectamente dentro de BottomSheet
  • Guardar el estado de WebView y restaurar en ANDROID
  • Los elementos de RecyclerView desaparecen después de cambiar entre fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.