Estas respuestas son bastante complicado. onClick
de un OnClickListener
todavía se llama al final de una pulsación larga si devuelve false
. Ese es el lugar más fácil para detectar el final de una pulsación larga.
Esto es especialmente importante saber porque si se implementa la ruta onTouch
cuando regresaba false
de onLongClick
(el valor por defecto a medida que da y con frecuencia lo que quiere), su código onClick
puede llamarse al final de sus largas prensas sin ti dándome cuenta.
Aquí es un ejemplo basado en la captura de una foto o un vídeo:
private boolean takingVideo = false;
captureButton.setOnClickListener(v -> {
// onClick gets called after normal click or long click
if(takingVideo) {
saveVideo();
} else {
takePhoto();
}
});
captureButton.setOnLongClickListener(v -> {
takeVideo();
return false;
});
private void takePhoto() {
// Save the photo
}
private void takeVideo() {
takingVideo = true;
// Start capturing video
}
private void saveVideo() {
takingVideo = false;
// Save the video
}
Como se puede ver, la lógica se vuelve muy sencillo cuando se deja Android propagar el evento toque final a un OnClickListener
.
Necesita explicar más por qué la posición de usuario en movimiento es importante. En cuanto a detectar el final de una pulsación larga, simplemente use setOnLongClickListener(). El método onLongClick() se invocará automáticamente cuando el usuario suelte el botón. – Squonk
Eso está mal: el método onLongClick se activa tan pronto como se detecta un clic largo, es decir, tan pronto como se produce el tiempo de espera para un "clic largo", NO cuando el usuario suelta el botón. –