2015-09-22 7 views
1

Я хочу создать slow секундомер в android, который начинается с 1 секунды. Все работает отлично, кроме одного. Я хочу, чтобы это было медленно смысл:Как создать медленный секундомер в android?

1.000/s //Start Time 
1.001/s //After 10ms 
1.002/s //After another 10ms 

Это не настоящий секундомера, но это что-то вроде этого. Мне нужно, чтобы игра, которую я создаю, увеличивает время каждые 10 мс. Пожалуйста, проверьте код на эмуляторе или на реальном устройстве для лучшего понимания.

Код:

private void startTime() { 

    final long startTime = SystemClock.uptimeMillis(); 

    timeHandler = new Handler(); //Handler 
    timeRunnable = new Runnable() { //Runnable 
     @Override 
     public void run() { 
      long timeInMilliseconds = SystemClock.uptimeMillis() - startTime + 1000; //Start time is 1.000/s 
      int secs = (int) (timeInMilliseconds/1000); 
      int mins = secs/60; 
      secs = secs % 60; 
      int milliseconds = (int) (timeInMilliseconds % 1000); 
      if (timeInMilliseconds > 60000) { 
       score.setText(mins + ":" + String.format("%02d", secs) + "." + String.format("%03d", milliseconds) + "/s"); 
      } else { 
       score.setText(String.format("%01d", secs) + "." + String.format("%03d", milliseconds) + "/s"); 
      } 
      timeHandler.postDelayed(this, 0); 
     } 
    }; 

    timeHandler.postDelayed(timeRunnable, 0); 
} 

Обратите внимание, что оценка является просто нормальный TextView, чтобы показать время. Пожалуйста, помогите мне. Благодарю.

ответ

0

После долгих проб и ошибок, я нашел очень простое решение, и я отправлю его здесь, если кто-то столкнется с такой же проблемой, как и я в будущем.

private void startTime() { 

    final long startTime = SystemClock.uptimeMillis(); 

    timeHandler = new Handler(); 
    timeRunnable = new Runnable() { 
     @Override 
     public void run() { 

      //Note the difference in the first two lines here. 
      long timeInMilliseconds = SystemClock.uptimeMillis() - startTime; 
      //You can change this 20 according to what you want. 
      timeInMilliseconds = (timeInMilliseconds/20) + 1000; 

      int secs = (int) (timeInMilliseconds/1000); 
      int mins = secs/60; 
      secs = secs % 60; 
      int milliseconds = (int) (timeInMilliseconds % 1000); 
      if (timeInMilliseconds > 60000) { 
       score.setText(mins + ":" + String.format("%02d", secs) + "." + String.format("%03d", milliseconds) + "/s"); 
      } else { 
       score.setText(String.format("%01d", secs) + "." + String.format("%03d", milliseconds) + "/s"); 
      } 
      timeHandler.postDelayed(timeRunnable, 0); 
     } 
    }; 

    timeHandler.postDelayed(timeRunnable, 0); 
} 

Теперь скорость скорости секундомера уменьшена. Я сделал увеличение времени на 1 мс каждые 20 мс вместо 10 мс, как я уже упоминал в вопросе, потому что это было более подходящим для меня. Конечно, вы можете изменить это 20 на все, что захотите.