2012-08-08 22 views
6

Tengo una clase que amplía SimpleOnPageChangeListener y en mi método onPageScrollStateChanged deseo poder determinar si el usuario ha pasado o retrocedido a través de ViewPager. Es decir. Si han pasado de izquierda a derecha o de derecha a izquierda.Android SimpleOnPageChangeListener - Determinar la dirección del deslizamiento

He hecho muchas búsquedas en Google sobre esto, pero no puedo encontrar nada al respecto. Esperaba que el método onPageScrollStateChanged proporcionara un parámetro que indicara en qué dirección estaba el deslizamiento, pero no es así.

@Override 
    public void onPageScrollStateChanged(int state) { 

     // Determine whether the user is swiping forwards or backwards through the ViewPager 
    } 

¿Alguien tiene alguna idea?

Saludos Mike

Respuesta

2

Use la ViewPager.SimpleOnPageChangeListener y mantienen una instancia var con el pos pestaña actual, de esa manera se puede calcular en qué dirección se ha birlado.

private final ViewPager.SimpleOnPageChangeListener mPageChangeListener = new ViewPager.SimpleOnPageChangeListener() { 

     @Override 
     public void onPageSelected(final int position) { 
      onTabChanged(mPager.getAdapter(), mCurrentTabPosition, position); 
      mCurrentTabPosition = position; 
     } 
    }; 

protected void onTabChanged(final PagerAdapter adapter, final int oldPosition, final int newPosition) { 
     //Calc if swipe was left to right, or right to left 
     if (oldPosition>newPosition){ 
      // left to right 
     } 
     else{ 
      //right to left 
     } 

    } 
+0

Hola Scottyab.Thanks por la rápida respuesta. Implementé esta solución, pero solo se activa después de que la página ya haya cambiado. Quiero realizar una validación para evitar que el usuario avance, pero para permitir que se muevan hacia atrás. Con esta solución, la página ya ha cambiado. – mighele

0
 int prevPage; 

     @Override 
     public void onPageSelected(int position) { 
      // went back a page 
      if (position-1 == prevPage) { 
       Log.i("Swipped", "Swipped Left"); 
      } 
      // went up a page 
      if (position+1 == prevPage) { 
       Log.i("Swipped", "Swipped Right"); 
      } 
      prevPage = position; 


     } 
Cuestiones relacionadas