martes, 29 de enero de 2013

Como detener el cronometro en el segundo en el que lo paramos

Como detener el cronometro en el segundo en el que lo paramos:
El problema surge cuando detenemos el cronometro,porque este sigue contando internamente el tiempo transcurrido desde el primer start. Es decir que si transcurrieron 5 segs desde el start hasta el stop, y permanecemos 4 segundos con el cronometro parado, al iniciarlo de nuevo el cronometro arrancará en 9 y no en 5.Para hacer que arranque en 5 bastará con la línea de codigo siguiente:
Ejemplo1.
     //Le RESTO al tiempo real que ha transcurrido, el tiempo consumido en milisegundos
miCronometro.setBase(SystemClock.elapsedRealtime()-segundosconsumidos*1000);
Otra forma seria:
Ejemplo2.
//Inicializar una variable:
tiempotranscurrido=0;
//despues de detener el cronometro, restarle a lo que marca,el tiempo real desde el primer start:
miCronometro.stop
tiempotranscurrido=miCronometro.getBase()-SystemClock.elapsedRealtime() //que nos dara un tiempo negativo
//antes de iniciar el cronometro le asignamos la suma entre el tiempo real y el tiempotranscurrido
miCronometro.setBase(SystemClock.elapsedRealtime()+tiempotranscurrido) //lo SUMO por que el tiempotranscurrido ya es NEGATIVO
miCronometro.start


El resto de codigo del primer ejemplo es el siguiente: (iria dentro del evento onclicklistener del toggleboton) 

if
(miBoton.isChecked()) {
     //Le RESTO al tiempo real que ha transcurrido, el tiempo consumido en milisegundosmiCronometro.setBase(SystemClock.elapsedRealtime()-segundosconsumidos*1000);miCronometro.start();

//guardo el tiempo al iniciarlo en una cadenaA
String cadenaA =
miCronometro.getText().toString();

//convierto los minutos
int minutosA = Integer.valueOf(cadenaA.substring(0, 2));
//convierto los segundos
int segundosA = Integer.valueOf(cadenaA.substring(3, 5));
totalsegundosA= minutosA * 60 + segundosA;
}
else {
miCronometro.stop();
//Paso a cadena los numeros del cronometro parado
String cadenaB =
miCronometro.getText().toString();
//Recojo los minutos
int minutosB = Integer.valueOf(cadenaB.substring(0, 2));
//Recojo los segundos
int segundosB = Integer.valueOf(cadenaB.substring(3, 5));
//Los sumo
int totalsegundosB = minutosB * 60 + segundosB;
diferenciasegundos = totalsegundosB - totalsegundosA;
//controlo los segundos consumidos
segundosconsumidos+= diferenciasegundos;
//Solo se permiten 6 resultados

if
(contador > 5) {
        Toast.makeText(MainActivity.
this,R.string.mensaje, Toast.LENGTH_LONG).show();
        }
else {
        // lo guardo en el array
        miArray[contador]=diferenciasegundos;
        //lo saco a pantalla
        texto.setText(texto.getText().toString()+"("+String.valueOf(miArray[contador])+")");
        //añado uno al contador


        contador++;
        }
}

No hay comentarios:

Publicar un comentario