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
.
- OnTouchListener de una vista vs onTouchEvent
- No puede manejar simultáneamente los eventos de clic y de toque
- ¿Cómo puedo mantener los eventos de ontouch manejados por un widget incluso si las coordenadas de tacto ya no están dentro del widget, en android
- Android dragvable ImageVIew
- ¿Cómo manejar hacer clic en las vistas secundarias y tocar en los ViewGroups de los padres?
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
…
- Audífono de cursor de ratón Android como OnTouchListener
- Diseño con posición dinámica
- Analog SetOnTouchListener o cómo se utiliza en xamarin, qué argumento debe ser
- cómo deslizar un evento button onTouch en android
- OnTouch dando extraños puntos de contacto Android
- Android deja de enviar eventos onTouch
- Saltar ImageView mientras arrastra. Los valores de getX () y getY () saltan
- OnTouch funciona, pero OnClickListener no?
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"
- Reanudar la actividad en lugar de iniciar si ya existe en la pila trasera
- Usar el diálogo PIN del sistema en la aplicación de Android