Quiero implementar la acción de repetición al presionar y mantener presionado un botón. Ejemplo: cuando un usuario hace clic en un botón y lo mantiene presionado, debe llamar a un método similar una y otra vez en un intervalo fijo hasta que el usuario retire su dedo del botón.acción de repetición de android al presionar y mantener presionado un botón
Respuesta
Existen varias formas de lograr esto, pero una muy sencilla sería publicar un Runnable
en un Handler
con un cierto retraso. En su forma más básica, que se verá algo como esto:
Button button = (Button) findViewById(R.id.button);
button.setOnTouchListener(new View.OnTouchListener() {
private Handler mHandler;
@Override public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mHandler != null) return true;
mHandler = new Handler();
mHandler.postDelayed(mAction, 500);
break;
case MotionEvent.ACTION_UP:
if (mHandler == null) return true;
mHandler.removeCallbacks(mAction);
mHandler = null;
break;
}
return false;
}
Runnable mAction = new Runnable() {
@Override public void run() {
System.out.println("Performing action...");
mHandler.postDelayed(this, 500);
}
};
});
La idea es bastante simple: enviar un Runnable
que contiene la acción repetida en un Handler
cuando se produce la acción toque 'abajo'. Después de eso, no publique Runnable
nuevamente hasta que la acción táctil 'arriba' haya pasado. El Runnable
se seguirá publicando en el Handler
(mientras que la acción táctil 'hacia abajo' todavía está ocurriendo), hasta que se elimine mediante la acción de retoque; eso es lo que habilita el aspecto de "repetición".
Dependiendo del comportamiento real del botón y su onclick/ontouch que está buscando, es posible que desee hacer la publicación inicial sin demora.
si quiero hacer algo extra cuando el usuario retiene el botón, digamos 5 segundos, ¿cómo puedo reconocer que el usuario está presionando el botón durante 5 segundos. –
Podrías empujar otro 'Runnable' retrasado al' Handler'. Si se trata de un evento único, simplemente no lo publique nuevamente desde el 'Runnable'. Además, no olvides quitarlo en la acción 'arriba', en caso de que el botón se suelte antes de que hayan transcurrido esos 5 segundos. –
Abajo el voto ya que los ascensores fuera del área del botón continuarán disparando el controlador. ACTION_CANCEL se requiere como mínimo como un fracaso en ACTION_UP. Desafortunadamente, si el botón está en una vista de desplazamiento u otro widget desplazable, este código puede hacer que parezca que el widget tocado todavía se mantiene aunque esté fuera de la pantalla o lejos del dedo del usuario. –
Puede registrar un View.OnKeyListener
para esa vista. Por favor, tenga en cuenta que es mejor reblandecer tales devoluciones de llamadas, de lo contrario, en caso de que su método haga algo incluso un poco "pesado", la interfaz de usuario no será fluida.
Aunque no es una gran idea. Se puede lograr iniciando un temporizador en onKeyDown
para disparar en un intervalo durante el cual mueva el cursor un paso y reinicie el temporizador. A continuación, puede cancelar el temporizador en el evento onKeyUp
. La forma en que esto funciona en otros sistemas es, por lo general, mover la primera tecla hacia abajo y luego esperar un poco para asegurarse de que el usuario está sosteniendo definitivamente el botón ... entonces la repetición puede ser un poco más rápida. Piensa en la repetición automática de un teclado. Esto debería funcionar y no debería afectar negativamente al hilo de la interfaz de usuario.
¿Por qué dices que no es una gran idea? – Suragch
- 1. ¿Cómo implemento presionar y mantener presionado el botón javascript?
- 2. Necesito el código de Javascript para presionar y mantener oprimido el botón
- 3. ¿Hay alguna manera de mantener presionado un botón html?
- 4. Forma diferente ACCIÓN según el botón presionado
- 5. Cómo determinar qué botón presionado en Android
- 6. acción de repetición de JavaScript cuando se mantiene presionado el mouse
- 7. El botón "Mantener presionado" en Android necesita cambiar los estados (selector XML personalizado) usando onTouchListener
- 8. ¿Cómo puedo escuchar un clic y mantener presionado en jQuery?
- 9. mantener el botón de Android seleccionado estado
- 10. Desactivar un clic derecho (mantener presionado) en la aplicación WPF.
- 11. ¿Cómo puedo mantener un botón presionado después de hacer clic en él?
- 12. Acción de botón separada y acción de transición
- 13. Cerrar la aplicación al presionar el botón Atrás en Android
- 14. Android para detectar cuando mantiene presionado un botón
- 15. oyente para presionar y soltar un botón
- 16. Selector para botón presionado
- 17. Formulario HTML hacer algo de "acción" al presionar el botón enviar
- 18. ¿Acción de clic de botón en Android?
- 19. Ignorando UIGestureRecognizer al presionar el botón
- 20. El control WPF no captura el evento de presionar y mantener presionado (clic derecho) cuando IsManipulationEnabled está configurado
- 21. ¿Cómo denegar el apagado al presionar el botón de encendido por un tiempo?
- 22. Android: ¿cómo cambiar el estado del botón presionado programáticamente?
- 23. obtener el texto del botón presionado
- 24. AS3 Ejecuta código continuamente mientras mantiene presionado un botón - Aire para iOS/Android
- 25. Cambiar el texto y la acción del botón - android development
- 26. ¿Cómo hacer que un UIButton se dispare continuamente durante una situación de mantener presionado?
- 27. Botón de acción de teclado suave de Android
- 28. Android: teclado personalizado y acción
- 29. evento desencadenante cuando el botón es presionado hacia abajo en Android
- 30. ¿Puede Jsoup simular presionar un botón?
Pero es la necesidad de mi aplicación. Quiero mover el cursor constantemente mientras el usuario sostiene el botón. Está funcionando bien para cada toque. Solo quiero repetir la acción mientras el usuario sostiene el botón. –
@JoxTraex: por favor, detalla tu punto de vista en una respuesta, y observa cuántas votaciones ascendentes se obtienen. –