example - ontouchdown android
ViewPager intercepta todos los eventos onTouch del eje x. ¿Cómo deshabilitar? (4)
¡el neutrino tenía razón!
getParent().requestDisallowInterceptTouchEvent(true);
una vez que viewpager acceda a touchEvent Intercept, la vista secundaria en él puede obtener el evento. enter image description here
Utilizo FrameLayout en viewpager para obtener el efecto DrawerLayout (no necesito que coincida con la altura de la pantalla, por lo que no puedo usar drawerlayout o el cajón de navegación).
¡Realmente ayuda!
Alcance
Hay un visor de dos fragmentos. Uno de esos fragmentos tiene un diseño que escucha los cambios de Toque en el eje X.
Problema
El diseño no recibe casi todas las acciones. Mueva los eventos al tocar y deslizarse a lo largo del eje X. Parece que viewpager tiene un onInterceptTouchEvent que devuelve verdadero.
Pregunta
¿Es real anular el comportamiento de Viewpager para que funcione y mi diseño funcione conjuntamente? Entonces, la situación perfecta es que el diseño intercepta todos los eventos onTouch y viewpager administra el resto de los eventos onTouch. ¡Gracias!
Situación similar (pero sin usar un ViewPager), poniendo esto en la vista que necesitaba el evento táctil funcionó para mí. Agregue cheques para MotionEvents que no sean ACTION_MOVE
si corresponde a su caso de uso.
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
this.getParent().requestDisallowInterceptTouchEvent(true);
return true;
} else {
return super.onTouchEvent(event);
}
}
Tienes razón, creo que cada contenedor desplazable intercepta los eventos táctiles, pero puedes evitarlo. Puede poner un oyente táctil en su diseño:
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
pager.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
pager.requestDisallowInterceptTouchEvent(false);
break;
}
}
Tuve un problema similar.
En mi caso, estaba configurando un OnTouchListener
en ViewPager
pero no recibía eventos táctiles cuando los niños que recibieron el toque tenían el ViewPager
.
Lo que hice fue extender la clase ViewPager y llamar a mi oyente click dentro del método onInterceptTouchEvent(boolean)
y funcionó bien. Solo tenga cuidado de no interceptar eventos incorrectos.