2010-10-16 7 views
5

Stavo cercando di creare un conto alla rovescia da http://helloandroidworld.com/2010/02/how-to-create-a-simple-android-countdown-timer/ ma non riesco a farlo funzionare con il formato che voglio 00:00:00 come descritto nell'articolo. Il timer inizierà e mi consentirà di metterlo in pausa e funzionerà per due minuti ma non lo vedrai in esecuzione. Se lo metti in pausa puoi vedere quanto tempo rimane ma tu non riesco a farlo funzionare. Senza la formattazione funziona bene e conta alla rovescia. Qualcuno ha questo lavoro o sa come aggiustarlo? Ho cercato in giro e non riesco a trovare nulla che copre un timer conto alla rovescia come questo con la formattazione. Qualsiasi aiuto sarebbe apprezzato.Formattazione del conto alla rovescia con 00:00:00 non funzionante. Visualizza 00:00:00 fino alla pausa quindi visualizza il tempo rimanente

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

Ho funzionato. Originariamente timeDisplay.setText ("Left:" + formatTime (timeRemaining)); era timeDisplay.setText ("Left:" + millisUntilFinished/100); e ho provato a mettere formatTime davanti a millisUntilFinished senza successo ma ho provato senza il/100 e funziona – Daniel

+7

Quindi per favore, per favore, rispondi alla tua risposta , in modo che questa domanda venga rimossa dalla lista senza risposta. – rds

risposta

Problemi correlati