2013-03-21 10 views
15
cmtr.setText(finalTime); 
cmtr.setBase(SystemClock.elapsedRealtime()); 

timetest = SystemClock.elapsedRealtime(); 
Log.d("SETTIME: ", ""+timetest); 
cmtr.start(); 

eltime = SystemClock.elapsedRealtime(); 
Log.d("ELapsed: ", ""+eltime); 

Uwaga: chcę uruchomić mój chronometr w odwrotnej kolejności. jak ustawiam chronometr na 10 sekund. teraz chcę rozpocząć od 10 do 0 sekund w odwrotnej kolejności. więc czy ktoś może pomóc w uzyskaniu tego rozwiązania? Z góry bardzo dziękuję.Jak uruchomić chronometr na biegu wstecznym w systemie Android?

Odpowiedz

43

Nie możesz, widżet Chronometer liczy się tylko, że to konkretny cel został wykonany dla. Jeśli chcesz odliczać, użyj CountDownTimer (strona SDK systemu Android zawiera konkretny przykład, w którym tekst jest aktualizowany) lub uruchom własne rozwiązanie.

Te klasy to banalne opakowania, które pozwalają zaoszczędzić trochę pisania. Naprawdę nie powinieneś czuć się niekomfortowo, pisząc alternatywną implementację, jeśli nie pasują do twoich dokładnych potrzeb.

[Aktualizacja]

Jak dodał Ronaldo Bahia w uwagach, gdyż API 24 chronometr rzeczywiście ten oferuje funkcjonalnie dzięki metodzie setCountDown.

+0

+1 dla dają mi taki miły wiedzy. – Riser

+0

Ja też, to uratowało mnie czas –

+0

Który jest próbka za pomocą CountDownTimer? –

15

Nie można wyświetlić widżetu chronometru w celu odliczania. Przykład zastosowania CountDownTimer poniżej tutaj moi odliczanie początek od 01:45 min 1s = 1000

CountDownTimer cT = new CountDownTimer(100000, 1000) { 

     public void onTick(long millisUntilFinished) { 


       String v = String.format("%02d", millisUntilFinished/60000); 
       int va = (int)((millisUntilFinished%60000)/1000); 
       textView.setText("seconds remaining: " +v+":"+String.format("%02d",va)); 
     } 

     public void onFinish() { 
      textView.setText("done!"); 
     } 
     }; 
     cT.start(); 
+1

Jak już wspomniałeś, jego 01:40 min nie 01:45 min – varun

1

Choronometer tylko się liczy. ale możemy zrobić odwrotność za pomocą tej małej sztuczki.

chrono.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { 
      @Override 
      public void onChronometerTick(Chronometer arg0) { 
       countUp = (SystemClock.elapsedRealtime() - startTime)/1000; 

       if (countUp % 2 == 0) { 
        chronoRecordingImage.setVisibility(View.VISIBLE); 
       } else { 
        chronoRecordingImage.setVisibility(View.INVISIBLE); 
       } 
       int min = (int) (countUp/60); 
       int sec = (int) (countUp%60); 

       Utility.printMessage(min+":"+sec); 
       int newCount = MAX_TIME - (int) countUp; // MAIN LOGIC 
       String asText = String.format("%02d",(newCount/60)) + ":" 
         + String.format("%02d", (newCount % 60)); 

       chrono.setText(asText); 
       if (countUp > MAX_TIME) { 
        //time complete 
       } 
      } 
     }); 
0
private static int sec = 60*2; // this is for 2 for min TODO replace your sec 

    public void startTimer(final TextView textView ,int sec) { 

    CountDownTimer downTimer= new CountDownTimer(1000 * sec, 1000) { 

     public void onTick(long millisUntilFinished) { 


      String v = String.format("%02d", millisUntilFinished/60000); 
      int va = (int) ((millisUntilFinished % 60000)/1000); 
      textView.setText(v + ":" + String.format("%02d", va)); 
     } 

     public void onFinish() { 
      textView.setText("done!"); 
     } 
    }; 
    downTimer.start(); 

} 

i nazywają to:

startTimer(tvClock,sec); 
Powiązane problemy