Hola, descubrimos la solución a tu pregunta, deslízate y la verás un poco más abajo.
Solución:
Ajuste smoothScroll = true en setCurrentItem(int item, boolean smoothScroll) no siempre tiene el efecto de desplazamiento suave. Supongamos que si tiene menos de 5 páginas en su visor, apenas notará el desplazamiento suave.
En este escenario, la forma difícil de hacerlo es ponerlo en un bucle for
//This will scroll page-by-page so that you can view scroll happening
for (int i = 0; i < mAdapter.getCount()-1; i++)
mPager.setCurrentItem(i, true);
Si alguien necesita un desplazamiento más lento, puede usar postDelayed() como este...
static int i=0;
private final Handler handler = new Handler();
somefunction()
handle.post(ViewPagerVisibleScroll);
Runnable ViewPagerVisibleScroll= new Runnable()
@Override
public void run()
if(i <= mAdapter.getCount()-1)
mPager.setCurrentItem(i, true);
handle.postDelayed(TopChartAnimation, 100);
i++;
;
Dormir siempre NO es recomendable : Si alguien necesita un desplazamiento más lento, puede usar una suspensión en este ciclo for...
@Override
public void onClick(View v)
Runnable runnable = new Runnable()
@Override
public void run()
for (int i = 0; i < mAdapter.getCount()-1; i++)
final int value = i;
try
Thread.sleep(50);
catch (InterruptedException e)
e.printStackTrace();
handler.post(new Runnable()
@Override
public void run()
mPager.setCurrentItem(value, true);
);
;
new Thread(runnable).start();
Probablemente, debería echar un vistazo a las siguientes API ViewPager.beginFakeDrag(), ViewPager. fakeDragBy (compensación flotante) y ViewPager.endFakeDrag() si desea una simulación de arrastre. Además, las API setCurrentItem() brindan la capacidad de configurar la página actual y hacerlo sin problemas. La forma más sencilla que podría sugerir para hacer la diapositiva automáticamente es configurar el controlador con Runnable simple que llamaría a los métodos de buscapersonas para configurar el elemento en la actividad y simplemente hacer postDelayed() para ello. Y no olvides llamar a removeCallbacks() para ello cuando la interacción del usuario o, por ejemplo, la actividad se detenga.
Primero cree la extensión de la clase Slider con TimerTask
public class SliderTimer extends TimerTask
private ViewPager viewPager;
private int size;
private Activity activity;
public SliderTimer(ViewPager viewPager, int size, Activity activity)
this.viewPager = viewPager;
this.size = size;
this.activity = activity;
@Override
public void run()
activity.runOnUiThread(() ->
if (viewPager.getCurrentItem() < size - 1)
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
else
viewPager.setCurrentItem(0, true);
);
Siguiente Crear SpeedSlowScroller para desplazamiento lento
public class SpeedSlowScroller extends Scroller
private int mDuration = 2500;
public SpeedSlowScroller(Context context)
super(context);
public SpeedSlowScroller(Context context, Interpolator interpolator)
super(context, interpolator);
public SpeedSlowScroller(Context context, Interpolator interpolator, boolean flywheel)
super(context, interpolator, flywheel);
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration)
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
@Override
public void startScroll(int startX, int startY, int dx, int dy)
// Ignore received duration, use fixed one instead
super.startScroll(startX, startY, dx, dy, mDuration);
Finalmente agregar SpeedSlowScroller en ViewPager, y Control deslizante Temporizador para desplazamiento automático
try
Field mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
SpeedSlowScroller scroller = new SpeedSlowScroller(_context);
mScroller.set(your_viewpager, scroller);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new SliderTimer(your_viewpager, models.size(), activity), 4000, 6000);
catch (Exception ignored)