2012-07-28 21 views
8

¿Se puede hacer que un Buscapersonas de la Vista se autodeslice o autopage? He puesto mi ViewPager para utilizar el adaptador como el de abajo y funciona bien: -Cómo deslizar automáticamente Android Pager

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

setContentView(R.layout.gridslide); 
ImagePagerAdapter mAdapter = new ImagePagerAdapter(
     getSupportFragmentManager(),4); 
ViewPager mPager = (ViewPager) findViewById(R.id.pager); 
mPager.setAdapter(mAdapter); 
} 

y el adaptador es como a continuación: -

public static class ImagePagerAdapter extends FragmentStatePagerAdapter { 
private final int mSize; 

public ImagePagerAdapter(FragmentManager fm, int size) { 
    super(fm); 
    mSize = size; 
} 

@Override 
public int getCount() { 
    return mSize; 
} 
@Override 
public Fragment getItem(int position) { 
    Log.v(TAG,"position="+position); 
    return TheFragment.newInstance(position); 
}} 

Sin embargo, me gustaría saber cómo hacer estos fragmentos se deslizan automáticamente en un visor.

+0

¿Desea también la animación de diapositivas? – sandrstar

+1

@sandrstar así que no diré que no si puedo obtener eso también :-) – Rasmus

+0

https://github.com/ajaydewari/AutoSlideViewpager – HAXM

Respuesta

12

Configuración 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 manera más difícil que hacer 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 más lento desplazamiento, que pueden utilizar postDelayed() así ...

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++; 
        } 
       } 
      }; 

sueño siempre se recomienda NO: Si alguien necesita más lento desplazamiento, pueden utilizar un sueño en este bucle 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(); 

     } 
+4

Definitivamente, dormir en el hilo de UI es una mala idea. Es mejor usar postDelayed() en su lugar. – sandrstar

+1

@sandrstar Sí, acepto su sugerencia. He vuelto a editar el código eliminando Thread.sleep() – Raghu

+0

Ambos crean una pérdida de memoria. – Ungoogleable

11

Probablemente, debería echar un vistazo a las siguientes API ViewPager.beginFakeDrag(), ViewPager. fakeDragBy(float offset) y ViewPager.endFakeDrag() si desea simulación de arrastre. Además, las API setCurrentItem() proporcionan la capacidad de configurar la página actual y hacerlo sin problemas. La forma más sencilla en que podría sugerir hacer una diapositiva automáticamente es configurar Handler con Runnable simple que llamaría a los métodos de buscapersonas para configurar el elemento en la actividad y simplemente haga postDelayed() para ello. Y no te olvides de llamar a removeCallbacks() para que cuando la interacción del usuario o, por ejemplo, pausa de actividad

+0

¿Qué quieres decir con eliminar devoluciones de llamada? ¿cómo puedo eliminar un ejecutable? – Shruti

+0

Quise eliminar removeCallbacks, como aquí http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29 que proporciona la capacidad de cancelar la ejecución Runnable programada para Handler. – sandrstar

Cuestiones relacionadas