android - Atrapa el evento onTouch por parte de los padres, lo maneja y pasa a los niños
android-layout click (1)
Mi entendimiento es que en realidad va en otra dirección. Las vistas de los niños hacen que su evento se active primero (más o menos). La vista raíz se llama dispatchTouchEvent()
, que propaga el evento a la onTouchEvent()
los niños, y luego, dependiendo de si devuelven verdadero o falso, se onTouchEvent()
al onTouchEvent()
del padre.
La solución normal para interceptar cosas como esta es anular dispatchTouchEvent(MotionEvent ev)
en la actividad de una persona de esta manera:
@Override
public boolean dispatchTouchEvent (MotionEvent ev) {
// Do your calcluations
return super.dispatchTouchEvent(ev);
}
La documentación para este está here . Tenga en cuenta que también puede anular ese método en cualquier grupo de ViewGroup
(como un FrameLayout
, etc.)
Traté de entender cómo manejaba Android el evento táctil y me confundí un poco. Por lo que entiendo, el evento táctil se envía a la vista raíz y se transmite a los niños. Tengo un FrameLayout
que es un contenedor para Fragment
. La primera vista de fragmentos es ScrollView
, la segunda es algún tipo de Gallery
(HorizontalListView) y la última también es FrameLayout
. Sólo un fragmento en el diseño cada vez. Lo que quiero hacer es identificar los movimientos del usuario en la pantalla, para el uso de la aplicación. Quiero contar los golpes y hacer algo después de un número de golpes.
Intenté colocar un OnTouchListener
en el FrameLayout
superior, pero no se llama cuando el elemento secundario es ScrollView
o Gallery
. Intenté devolver false
y también true
al final de onTouch
, pero obtengo el mismo resultado: nunca se me ha llamado.
¿Cómo puedo hacerlo? Solo quiero "de forma transparente" manejar los eventos táctiles y transmitirlos como si ni siquiera los hubiera tocado.