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?
- Cambiar la dirección de desplazamiento de viewPager
- ViewPager con la API de Google Maps v2: vista negra misteriosa
- FragmentPagerAdapter no se puede resolver con un tipo
- Cambio de la cuenta de ViewPager
- Los fragmentos ViewPager hacen referencia al mismo RecyclerView y / o Adapter
- Ver indicador de buscapersonas Jake Wharton
- Hay una manera de cargar una imagen predeterminada en picasso
- Haga que todo el elemento ViewPager esté alineado al centro cuando PagerAdapter.getPageWidth () <1f
- ViewPager - personalización del título PagerTabStrip
- ¿Cómo puedo mostrar un ViewPager en modo de pantalla completa?
- Cómo obtener la posición actual en FragmentPagerAdapter?
- Quitar TabIndicator de PagerTabStrip en un ViewPager
- Rotación de la pantalla de Android ViewPager
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:
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); }
- Retrofit "IllegalStateException: Ya ejecutado"
- Android convertir cadena codificada en base64 en vista de imagen