En Android, la mayoría de los métodos de escucha de eventos devuelven un valor booleano. ¿Qué significa ese valor verdadero / falso? ¿Qué resultará en los eventos posteriores?
class MyTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
logView.showEvent(event);
return true;
}
}
Con respecto al ejemplo anterior, si se devuelve verdadero en el método onTouch , encontré que cada evento táctil (ABAJO, ARRIBA, MOVIMIENTO, etc.) se ha capturado de acuerdo con mi logView . Por el contrario, si devuelve falso, solo se capturará el evento DOWN. Por lo tanto, parece que devolver falso evitará que el evento se propague. Estoy en lo correcto ?
Además, en OnGestureListener , muchos métodos también tienen que devolver un valor booleano. ¿Tienen el mismo significado?
De la documentación: http://developer.android.com/reference/android/view/View.OnTouchListener.html#onTouch(android.view.View , android.view.MotionEvent)
"Verdadero si el oyente ha consumido el evento, falso en caso contrario".
Si devuelve verdadero, el evento se procesa. Si es falso, pasará a la siguiente capa hacia abajo.
fuente
El valor booleano determina si el evento se consume o no.
Sí, tienes razón. Si devuelve falso, el siguiente oyente maneja el evento. Si devuelve verdadero, su oyente consume el evento y no lo envía al siguiente método.
fuente
true
significa que consumió el evento y desea el resto de los eventos en el gesto; otros oyentes / vistas no recibirán los eventos.false
significa dejar que otra persona se encargue del evento. Sin embargo, es un poco más específico que eso; mira mi respuesta.Toda la respuesta anterior es correcta, pero el resultado es diferente si la vista es
clickable
o noclickable
Ejemplo , tengo un
LinearLayout
contiene 1Button
y 1TextView
como esteEn Actividad, tengo un código como
Caso 1
Linear onTouch return **FALSE**
,Button onTouch return **FALSE**
,TextView onTouch return **FALSE**
Haga clic en el botón
Haga clic en TextView
Haga clic en LinearLayout
Caso 2
Linear onTouch return **FALSE**
,Button onTouch return **TRUE**
,TextView onTouch return **TRUE**
Haga clic en el botón
Haga clic en TextView
Haga clic en LinearLayout
Caso 3
Linear onTouch return **TRUE**
,Button onTouch return **FALSE**
,TextView onTouch return **FALSE**
Haga clic en el botón
Haga clic en TextView
Haga clic en LinearLayout
Nota
TextView
esnot clickable
, se podrá hacer clic en él si lo configuramosandroid:clickable="true"
en xml O cuando configuramostextView.setOnClickListener(...)
event MOVE
puede llamar más que mi registro (se basa en cómo toca)Resumen
onTouch
volvertrue
o ver esclickable
, Ver recibirá todoonTouchEvent
onTouch
volverfalse
y la vista no esclickable
, la vista no recibirá SIGUIENTE onTouchEvent (su padre puede recibirlo)Espero que ayude a
DEMO
fuente
Perdí casi un día en la resolución de problemas, pero descubrí que mi función onTouch se llama 2 veces cuando se usa verdadero y 1 veces cuando se usa falso.
fuente
event.getAction()
porque si regresafalse
en el evento ACTION_DOWN, el oyente ignora el eventoDesde el documento de Android :
Nota: Android llamará a los controladores de eventos primero y luego a los controladores predeterminados apropiados de la definición de clase en segundo lugar. Como tal, devolver true de estos detectores de eventos detendrá la propagación del evento a otros detectores de eventos y también bloqueará la devolución de llamada al controlador de eventos predeterminado en la Vista. Así que asegúrese de que desea finalizar el evento cuando devuelva verdadero.
fuente