Si quieres hacer una simple cuenta atrás o cronómetro inverso Android proporciona la clase CountDownTimer para tal fin. Su uso es muy simple tal y como se muestra en su documentación oficial y como vamos a ver a continuación.
Como ejemplo vamos a crear una cuenta atrás de 20 segundo decrementando segundo a segundo y notificando a cada segundo:
new CountDownTimer(20000, 1000) { public void onTick(long millisUntilFinished) { mTextField.setText("seconds remaining: " + millisUntilFinished / 1000); } public void onFinish() { mTextField.setText("done!"); } }.start();
El constructor es muy sencillo ya que sólo requiere el tiempo total o de comienzo de la cuenta atrás y el intervalo de tiempo en el que este se va a decrementar (todo ello en milisegundos). En el caso del ejemplo tenemos una cuenta atrás de 20 segundos (2000 milisegundos) decrementandose de segundo en segundo (cada 1000 milisegundos).
Como vemos, tenemos básicamente dos eventos que nos van a hacer muy útiles:
- onTick: Este evento se invoca en cada intervalo de decrementación, es decir, cada segundo en este ejemplo.
- onFinish: Este evento se invoca una vez que la cuenta atrás o el cronómetro inverso han acabado, se ha completado por tanto el tiempo total de 20 segundos del ejemplo.
Además de los dos eventos anteriores tenemos los métodos start y cancel para comenzar la cuenta atrás y cancelarla respectivamente.
Una aclaración muy a tener en cuenta es que el evento onTick es sincronizado para el objeto cuenta atrás creado, es decir, un nuevo evento onTick no es invocado hasta que el anterior a finalizado. Este dato se debe de tener en cuenta ya que si se insertan en él operaciones bloqueantes o secuenciales que tardan un cierto tiempo en realizarse puede alterar el tiempo total del cronómetro inverso.
Como se puede apreciar su uso es sencillo y puede resultar de gran utilidad en algunos desarrollos que requieran de un tiempo limite, como juegos con niveles de dificulta.
Happy minds!
Muy buen artículo, me sirvió de gran ayuda para crear una cuenta atrás ya que no sabía ni por donde empezar.
Me sirvio de mucho! muchisimas gracias!
¿Sabes hacer un programa de cuenta atrás, pero de días? :s
hey si, no sabes hacerlo en dias??
Hola, disculpa como agregaria esto a un cronometro ya creado, Yo hice un cronometro pero tengo que agregarle el cuenta atras, como lo haría a travez de un boton
Muy Bueno!
Como sería si tengo dos fechas y quiero una cuenta regresiva que me vaya mostrando los meses dias horas y segundos que faltan para llegar a una determinada fecha?