with viewpager studio fragments example android android-viewpager

viewpager - view pager adapter android studio



Desactivar y habilitar la paginaciĆ³n en ViewPager en Android (3)

Estoy usando la versión 4 del paquete de compatibilidad de Android para mostrar páginas en mi aplicación. He utilizado PagerAdapter & ViewPager para mostrar páginas en PDF como la vista de desplazamiento horizontal.

Ahora el problema está en las cosas relacionadas con paginación. Puedo detener el paginado detectando elementos secundarios dentro del viewpager de acuerdo con este thread android: ViewPager y 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; } }

Cuando intente tocar fuera de la página en pdf, también if(scroll!=null) que if(scroll!=null) convierte en verdadero en ambas orientaciones.

¿Alguien me puede ayudar a volver a habilitarlo para que la búsqueda continúe en ViewPager?


Lo está configurando en falso, pero no tiene fundamento para restablecerlo a verdadero. Además, su lógica de toque 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; }


Estaba teniendo un problema similar con los archivos de imagen de paginación que necesitan pellizcar para hacer zoom. 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. Primera ampliación: la clase MyViewPager extiende ViewPager {...} Y luego en esa clase se anula siguiendo 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 su paginador de visualización en diseños xml o creación dinámica desde el código.


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

reemplace "return false" por "return this.enable" y establezca el valor predeterminado de this.enable en falso