2010-10-16 20 views
5

Estaba intentando crear un temporizador de cuenta regresiva desde http://helloandroidworld.com/2010/02/how-to-create-a-simple-android-countdown-timer/ pero no consigo que funcione con el formato que quiero 00:00:00 como se describe en el artículo. El temporizador se iniciará y me permitirá pausarlo y se ejecutará durante dos minutos, pero no se puede ver funcionando. Si lo pausa, puede ver cuánto tiempo le queda pero no puedo hacerlo funcionar. Sin el formato, funciona bien y cuenta regresivamente. ¿Alguien tiene esto funcionando o sabe cómo solucionarlo? He estado buscando y no encuentro nada que cubra un temporizador de cuenta atrás como este con el formateo. Cualquier ayuda sería apreciada.El temporizador de cuenta atrás de formateo con 00:00:00 no funciona. Muestra 00:00:00 hasta que se pausa y luego muestra el tiempo restante

TextView timeDisplay; 
    MyCount counter; 
    int state = 0; 
    int length = 120000; 
    long startTime = 0; 
    long currentTime = 0; 
    long timeElapsed = 0; 
    long timeRemaining = 0; 
    long prevTimeRemaining = 0; 
    Button control; 

    public String formatTime(long millis) { 
      String output = "00:00:00"; 
      long seconds = millis/1000; 
      long minutes = seconds/60; 
      long hours = minutes/60; 

      seconds = seconds % 60; 
      minutes = minutes % 60; 
      hours = hours % 60; 

      String secondsD = String.valueOf(seconds); 
      String minutesD = String.valueOf(minutes); 
      String hoursD = String.valueOf(hours); 

      if (seconds < 10) 
      secondsD = "0" + seconds; 
      if (minutes < 10) 
      minutesD = "0" + minutes; 
      if (hours < 10) 
      hoursD = "0" + hours; 

      output = hoursD + " : " + minutesD + " : " + secondsD; 
      return output; 
     } 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.countdown); 

    timeDisplay = (TextView) findViewById(R.id.timer); 
    control = (Button) findViewById(R.id.control); 
    counter = new MyCount (length, 1000); 
    } 

    public void control(View view) { 
    switch (state) { 
    case 0: 
     startTime = System.currentTimeMillis(); 
     counter.start(); 
     control.setText(R.string.pause); 
     state = 1; 
     break; 
    case 1: 
     // pause 
     currentTime = System.currentTimeMillis(); 
     timeElapsed = currentTime - startTime; 
     if (prevTimeRemaining == 0) 
     timeRemaining = length - timeElapsed; 
     else 
     timeRemaining = prevTimeRemaining - timeElapsed; 
     counter.cancel(); 
     timeDisplay.setText("" + formatTime(timeRemaining)); 
     control.setText(R.string.resume); 
     prevTimeRemaining = timeRemaining; 

     // resume 
     counter = new MyCount(timeRemaining, 1000); 
     state = 0; 
     break; 
    case 2: 
     prevTimeRemaining = 0; 
     counter = new MyCount(length, 1000); 
     control.setText(R.string.start); 
     timeDisplay.setText(R.string.timer); 
     state = 0; 
    } 
    } 

    public class MyCount extends CountDownTimer { 

    public MyCount(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
    } 

    public void onFinish() { 
     timeDisplay.setText("done!"); 
     state = 2; 
    control.setText(R.string.restart); 
    } 

    public void onTick (long millisUntilFinished) { 
     timeDisplay.setText ("Left: " + formatTime(timeRemaining)); 

    } 

    } 

} 
+2

I got it working. Originalmente timeDisplay.setText ("Left:" + formatTime (timeRemaining)); was timeDisplay.setText ("Izquierda:" + millisUntilFinished/100); y había intentado poner formatTime delante de millisUntilFinished sin éxito pero lo intenté sin/100 y funciona – Daniel

+7

Luego, por favor, responda y compruebe su propia respuesta, de modo que esta pregunta se elimine de la lista no respondida. – rds

Respuesta

Cuestiones relacionadas