studio event ejemplo action_outside android ontouchevent ontouchlistener

android - ejemplo - Manejo del evento táctil de intercepción sin extender ViewGroup



ontouchlistener android ejemplo (5)

Intente agregar onTouchListener a RelativeLayout

RelativeLayout rl = (RelativeLayout) findViewById( R.id.relativeLauout ); rl.setOnTouchListener( new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // do something return false; } });

o use el método onTouchEvent de Activity

@Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return super.onTouchEvent(event); }

Tengo un RelativeLayout y este diseño tiene casi 10 vistas.

He configurado OnTouchListener para este diseño y OnTouchListener trabajando en él y volviéndolo true .

este oyente funciona bien cuando toco el diseño donde no hay Vista (significa en el área Vacía). Si toco las vistas de niños de este diseño, este oyente no está disparando ...

y de la documentación, entendí que podemos anular onInterceptTouchEvent() extendiendo ViewGroup (así que aquí RelativeLayout) y manejar eventos táctiles antes de que las vistas secundarias consuman este evento ...

esto hará un truco, pero necesito modificar muchos archivos xml donde necesito esta funcionalidad reemplazando RelativeLayout con mi CustomRelativeLayout.

entonces mi pregunta es:

¿Hay alguna manera de manejar el evento táctil para RelativeLayout (ofcourse ViewGroup) antes de que las vistas secundarias en RelativeLayout consuman el evento? No quiero extender RelativeLayout ...


Intente devolver falso en el método onTouchEvent() de vistas secundarias al procesar el evento ACTION_DOWN . Por lo tanto, los eventos táctiles de reenvío no se enviarán a las vistas secundarias, también conocido como evento no consumido.


Si bien no necesariamente es lo ideal, esto funciona bien para diseños más pequeños que no tendrán contenido dinámico.

En xml, configure android:clickable="false" para todos los descendientes de ViewGroup en el diseño (incluidos los ViewGroups anidados y sus hijos). Cada niño al que se haga clic en él propagará el clic a su padre y, finalmente, accederá a los controladores táctiles predeterminados de ViewGroup. Asegúrese de establecer el grupo de vista raíz, donde desea obtener los eventos de clic como android:clickable="true" o viewgroup.setClickable(true)

Si agrega vistas dinámicamente, asegúrese de llamar a view.setClickable(false); Antes de agregarlo a la jerarquía de vistas.


Simplemente puede establecer en su xml:

android:clickable="true"


Trate de anular

@Override public boolean dispatchTouchEvent(MotionEvent ev) { return super.dispatchTouchEvent(ev); }

de Activity . Este método es el primero que procesa eventos táctiles. Pero en este caso necesitas trabajar con las coordenadas actuales de las vistas.