2016-09-13 5 views
0

Я успешно реализую секундомер, но я не получаю правильные миллисекунды с двумя цифрами, такими как mm: ss. SS 02:54. , мой кодAndroid StopWatch: миллисекунды с двумя цифрами

private Runnable updateTimerThread = new Runnable() { 
    public void run() { 
     timeMill=timeMill+100; 
     updateTime(timeMill); 
     stopWatchHandler.postDelayed(this, 100); 
    } 
}; 



    private void updateTime(long updatedTime) { 
     //I want to convert this updateTime to Milliseonds like two digit 23 
} 

я также попробовать этот final int mill = (int) (updatedTime % 1000);, но это всегда получает 10, 20, 30 ... и т.д., но я хочу, чтобы получить 10,11,12,13..so на , если у вас есть представление об этом, plz помогите мне.

ответ

1

Вы увеличиваете на 100 мс. Вам нужно увеличить на 10 мс и вывести runnable с задержкой в ​​10 мс. Вы можете форматировать длинные, используя SimpleDateFormat.

private Runnable updateTimerThread = new Runnable() { 
    public void run() { 
     timeMill += 10; 
     updateTime(timeMill); 
     stopWatchHandler.postDelayed(this, 10); 
    } 
}; 

private void updateTime(long updatedTime) { 
    DateFormat format = new SimpleDateFormat("mm:ss.SS"); 
    String displayTime = format.format(updatedTime); 
    // Do whatever with displayTime. 
} 

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

Я бы сохранить время, когда запускается секундомер и рассчитать время, прошедшее с этого каждое обновление:

startTime = System.nanoTime(); 
//Note nanoTime isn't affected by clock or timezone changes etc 

private Runnable updateTimerThread = Runnable() { 
    public void run() { 
     long elapsedMiliseconds = (System.nanoTime() - startTime())/1000; 
     updateTime(elapsedMiliseconds); 
     stopWatchHandler.postDelayed(this, 10); 
    } 
}; 
+0

Спасибо за ваш ответ, но я не получаю Правильный milisecond для использования этого я получаю как это 30: 00.70, 30: 00.80, но я хочу, как 30: 00.71, 30: 00.72 это –

+0

ваш прирост составляет 100 мс. Используйте 10 мс вместо –

+0

мой секундомер будет очень медленным –

0

использование stopWatchHandler.postDelayed (это, 10);

+1

, тогда мой секундомер будет очень медленным –

0
stopWatchHandler.postDelayed(this, 100); 
timeMill=timeMill+100; 

100ms = 0,1s 
10ms = 0,01s 

Вы обновляете каждую десятую секунд своего таймера.

+0

Я не понимаю, о чем вы говорите? –

1
  timeMill=timeMill+100; 
      updateTime(timeMill/100); 
      stopWatchHandler.postDelayed(this, 10); 
+0

Вы получаете какие-либо проблемы по моему коду, потому что он работает в моем конце. –

0

Это потому, что вы обновляете stopwatch каждую десятую секунды в этом коде stopWatchHandler.postDelayed(this, 100); так рассчитывает как: 0.1, 0.2, 0.3, ...

Вы должны изменить его: stopWatchHandler.postDelayed(this, 10);