2011-11-15 9 views
14

Estoy usando el paquete de compatibilidad android versión 4 para mostrar páginas en mi aplicación. He utilizado el PagerAdapter & ViewPager para visualizar páginas en PDF como la vista de desplazamiento horizontal.Deshabilitar y habilitar paginación en ViewPager en Android

Ahora el problema está en las cosas relacionadas con la paginación. Puedo detener la búsqueda detectando elementos secundarios dentro del visor de acuerdo con este hilo android: ViewPager and HorizontalScrollVIew, pero ¿cómo puedo habilitar eso cuando el usuario toque fuera de esa vista. He usado el siguiente código para CustomViewPager.

public class CustomViewPager extends ViewPager { 

     private boolean enabled; 
     private int childId; 

     public CustomViewPager(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      this.enabled = true; 
     } 

     public void setChildId(int childId) { 
      this.childId = childId; 
     } 

     @Override 
     public boolean onInterceptTouchEvent(MotionEvent event) { 
      boolean result = false; 
      View scroll = getChildAt(childId); 
      if (scroll != null) { 
       Rect rect = new Rect(); 
       CommonLogic.logMessage("PDF Page Rectangle ", TAG, Log.VERBOSE); 
       scroll.getHitRect(rect); 
       if (rect.contains((int) event.getX(), (int) event.getY())) { 
        setPagingEnabled(false); 
        result = true; 
       } 
      } 
      return result; 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      if (this.enabled) { 
       return super.onTouchEvent(event); 
      } 
      return false; 
     } 

     public void setPagingEnabled(boolean enabled) { 
      this.enabled = enabled; 
     } 
    } 

Al tratar de tocar fuera de la página PDF a continuación, además, que se convierte en verdadera if(scroll!=null) tanto en orientación.

¿Alguien me puede ayudar a volver a habilitarlo para que la paginación continúe en ViewPager.

+1

¿Ha tryed esto: http://stackoverflow.com/a/2655740/969325 – Warpzit

Respuesta

3

Estaba teniendo un problema similar con los archivos de imagen de paginación que necesitan pellizcar para acercar. Simplemente pida a Needing una forma de deshabilitar la búsqueda cuando la imagen se amplía y habilítelo cuando se muestre toda la imagen. Lo resolví así y creo que podrías hacer algo similar. En primer lugar extiende: MyViewPager clase extiende ViewPager {...} Y entonces, en esa clase de anulación siguientes dos métodos

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (YOUR_CRITERIA_TOENABLE_DISABLE) { 
     return true; 

    } else { 
     return super.onTouchEvent(event); 
    } 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    return super.onInterceptTouchEvent(event); 
} 

Asegúrese de usar la vista de localizador en diseños XML o la creación dinámica de código.

0

Lo está configurando en falso pero no tiene fundamento para restablecerlo a verdadero. Además, su lógica táctil de interceptación parece un poco extraña ... la única vez que permite que el buscapersonas intercepte (y por lo tanto procese en onTouchEvent()) es cuando establece la paginación habilitada en falso. ¿Qué tal lo siguiente?

@Override 
    public boolean onInterceptTouchEvent(MotionEvent event) { 
     boolean result = true; 
     View scroll = getChildAt(childId); 
     if (scroll != null) { 
      Rect rect = new Rect(); 
      CommonLogic.logMessage("PDF Page Rectangle ", TAG, Log.VERBOSE); 
      scroll.getHitRect(rect); 
      if (rect.contains((int) event.getX(), (int) event.getY())) { 
       setPagingEnabled(false); 
       result = false; 
      } else { 
       setPagingEnabled(true); 
      } 
     } 
     return result; 
    } 
1
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (this.enabled) { 
      return super.onTouchEvent(event); 
    } 
    return false; 
} 

public void setPagingEnabled(boolean enabled) { 
    this.enabled = enabled; 
} 

reemplazar "return false" a "volver this.enable" y el valor predeterminado de this.enable en false

Cuestiones relacionadas