Manejo del evento de toque Intercept sin extender ViewGroup

Tengo un RelativeLayout y este diseño tiene casi 10 puntos de vista en él.

He fijado OnTouchListener a esta disposición y haciendo un cierto trabajo en él y volviendo true .

Este oyente está trabajando muy bien cuando toco el diseño donde no hay vista (media 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.

Así que mi pregunta es:

¿Hay alguna forma de manejar el evento touch para RelativeLayout (ofcourse ViewGroup) antes de que las vistas secundarias en RelativeLayout consuman el evento? No quiero extender RelativeLayout

Trate de anular

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

De Activity . Este método es el primero que los eventos de contacto de proceso. Pero en este caso es necesario trabajar con las coordenadas actuales de las vistas

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

En xml, establezca android:clickable="false" a todos los descendientes del ViewGroup en el diseño (incluidos los ViewGroups anidados y sus hijos). Cada niño que se hace clic en a continuación, se propaga el clic a su padre, eventualmente llegar a los manejadores táctiles por defecto del ViewGroup. Asegúrese de establecer raíz ViewGroup, 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 añadirlo a la jerarquía de vistas.

Intente devolver false en el método onTouchEvent() de las 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, aka evento no consumido.

Intenta 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 la Actividad

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

Usted puede simplemente establecer en su xml:

 android:clickable="true" 
  • Ocultar teclado en android mientras se toca fuera Editar área de texto
  • Arrastrar y soltar imágenes en android
  • Reducir animadamente el tamaño del botón en la prensa y recuperar su tamaño en la versión
  • Android: ImageView getID (); Devolver entero
  • Combinación de combinación de Android :: OnTouchListener && OnClickListener
  • Android principiante: toque eventos en android gridview
  • Android WindowManager TYPE_SYSTEM_ALERT Diseño en el tacto
  • Imagen en lienzo con eventos táctiles
  • Limitación de Drag de ImageView en Android
  • Cómo implementar OnTouch Listener en XML
  • Android: ¿Cómo determinar el índice de caracteres de la posición de un evento táctil en TextView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.