2016-04-10 13 views
0

Ich habe einen Countdown-Timer in meinem Code. Dieser Countdown-Timer soll alle 10ms und die Anzahl der Textansichten um 1 ankreuzen, bis die Anzahl der Nutzer erreicht ist, die sie während des Spiels erhalten haben.Android Countdown-Timer läuft nicht richtig

Es erreicht nicht einmal die Hälfte des Wertes. Hier ist mein Code:

new CountDownTimer(lastScore*10, 10) { 

     public void onTick(long millisUntilFinished) { 
      tempScore++; 

      TextView lg = (TextView)findViewById(R.id.lastgame); 
      lg.setText("LAST SCORE: " + String.valueOf(tempScore)); 
      lg.setTypeface(eightBitFont); 
     } 

     public void onFinish() { 

     } 

    }.start(); 

Lastscore ist die Punktzahl, die sie während des Spiels bekommen haben. tempScore wird nur zum Speichern des neuen Werts verwendet, um die Textansicht zu ändern.

BEARBEITEN: Ein Benutzer wies darauf hin, dass 10ms zu fein für eine Auflösung sein könnte. Mit 10ms Auflösung hatte ich einen lastScore Wert von 115, und tempScore wurde nur bis zu 46. Ich änderte es auf 30ms, ich stieg auf 108 oder so und änderte es auf 50 hat mich noch näher gebracht. Es scheint, dass ich einen Wert von 100ms Ticks verwenden muss, um den richtigen Wert zu erhalten. Aber das ist ein bisschen langsam für das, was ich erreichen möchte. Gibt es einen besseren Weg, um das zu erreichen, was ich erreichen möchte?

+0

Haben Sie überprüft, was ist "lastScore" Wert? –

+0

Ja. Ohne den Timer zu verwenden und die 3 Textzeilenlinien zu verwenden, und den Wert auf lastScore einzustellen zeigt den korrekten Wert –

+0

Hi @Josh, Was ist genau der Wert von lastScore (geben Sie uns ein Beispiel, mit dem Sie testen) .... Der CountDownTimer-Konstruktor empfängt als ersten Parameter die Zeit in Millisekunden, für die der Countdown ausgeführt werden soll. – velval

Antwort

0

Jedes Mal, wenn Sie Countdown kitzeln, rufen Sie eine teure Methode findViewById. Sie müssen es außerhalb des Timers zuweisen. Ihr Code könnte also so aussehen:

TextView lg = (TextView)findViewById(R.id.lastgame); 

new CountDownTimer(lastScore*10, 10*1000) { // set to be called each 10 seconds 

     public void onTick(long millisUntilFinished) { 
      tempScore++; 
      lg.setText("LAST SCORE: " + String.valueOf(tempScore)); 

     } 

     public void onFinish() { 

     } 

    }.start();