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
truesignifica que consumió el evento y desea el resto de los eventos en el gesto; otros oyentes / vistas no recibirán los eventos.falsesignifica 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
clickableo noclickableEjemplo , tengo un
LinearLayoutcontiene 1Buttony 1TextViewcomo 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
TextViewesnot clickable, se podrá hacer clic en él si lo configuramosandroid:clickable="true"en xml O cuando configuramostextView.setOnClickListener(...)event MOVEpuede llamar más que mi registro (se basa en cómo toca)Resumen
onTouchvolvertrueo ver esclickable, Ver recibirá todoonTouchEventonTouchvolverfalsey 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 regresafalseen 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