2016-10-23 5 views
0

machen Ich erstelle eine Android-App, und ich möchte Zeitzähler machen. Es gibt zwei lange Variablen, die lange Daten speichern.Ich möchte Counter-Zeit in Android

Wenn die zweite Sekunde beendet ist, muss die zweite Sekunde gestartet werden und nach diesem Prozess muss vier Mal das Ende erreicht werden.

public void Counter(long runsecond, final long walksecond) { 
    new CountDownTimer(runsecond, 1000) { 

     public void onTick(long millisUntilFinished) { 
      showtext.setText("seconds remaining: " + millisUntilFinished/1000); 
     } 

     public void onFinish() { 
      showtext.setText("done!"); 
      new CountDownTimer(walksecond, 1000) { 

       public void onTick(long millisUntilFinished) { 
        mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
       } 

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


     } 
    }.start(); 
} 

ich nehme für. nur zählt es einmal. Wie kann ich dieses Problem beheben?

+0

Es ist nicht klar, was Sie erreichen möchten. Sie möchten den gesamten Lauf-/Laufzyklus zweimal wiederholen? In einfachen Worten: Lauf für X Sek. -> Geh für Y Sek -> Lauf für X Sek. -> Geh für Y Sek. – skywall

+0

ja wie du gesagt hast. wie kann ich? – vahitdurmus

Antwort

0

Ich denke, so etwas könnte Ihre Bedürfnisse erfüllen. Die Anzahl der Sekunden für Lauf- und Laufzähler ist konfigurierbar. Wiederholungsrate gibt an, wie oft beide Zähler laufen sollen.

public enum CounterType { 
    RUN_COUNTER, 
    WALK_COUNTER 
} 

private void start() { 
    int runSeconds = 5; 
    int walkSeconds = 5; 
    int repeatRate = 4; // 2 - run, 2 walk 

    startCount(runSeconds, walkSeconds, repeatRate, RUN_COUNTER); 
} 

private void startCount(final int runSeconds, final int walkSeconds, final int repeatRate, final CounterType actualCounter) { 
    if (repeatRate == 0) { 
     return; 
    } 

    int actualSeconds = 0; 
    if (actualCounter == RUN_COUNTER) { 
     actualSeconds = runSeconds; 
    } else if (actualCounter == WALK_COUNTER) { 
     actualSeconds = walkSeconds; 
    } 

    new CountDownTimer(actualSeconds * 1000, 1000) { 
     @Override public void onTick(long millisUntilFinished) { 
      Log.d("Counter - onTick", actualCounter.toString() + ": millis remaining: " + millisUntilFinished); 
     } 

     @Override public void onFinish() { 
      Log.d("Counter - onFinish", actualCounter.toString()); 
      CounterType nextCounter = actualCounter == RUN_COUNTER ? WALK_COUNTER : RUN_COUNTER; 
      startCount(runSeconds, walkSeconds, repeatRate - 1, nextCounter); 
     } 
    }.start(); 
}