[英]Countdown timer is not working correctly
我有一個倒計時計時器,該計時器可獲取我的時間選擇器的值,並在設置時間選擇器時開始遞減計數,但是發生的是它沒有倒計時到您設置時間選擇器的當前時間。 我的問題是如何讓我的倒數計時器倒數至目前時間。
這是我的代碼...
TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
timer = new CounterClass((minute * 60 * 1000) + (hourOfDay * 60 * 60 * 1000), 1000);
long millis = (minute * 60 *1000) + (hourOfDay * 60 * 60 *1000);
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
System.out.println(hms);
textViewTime.setText(hms);
timer.start();
}
};
public class CounterClass extends CountDownTimer {
/**
* @param millisInFuture The number of millis in the future from the call
* to {@link #start()} until the countdown is done and {@link #onFinish()}
* is called.
* @param countDownInterval The interval along the way to receive
* {@link #onTick(long)} callbacks.
*/
public CounterClass(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public void onTick(long millisUntilFinished) {
long millis = millisUntilFinished;
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
System.out.println(hms);
textViewTime.setText(hms);
Bundle b = new Bundle();
b.putString(hms, hms);
Intent mainActivity = new Intent("android.intent.action.MAIN");
mainActivity.putExtras(b);
}
@Override
public void onFinish() {
}
}
謝謝:)
您將需要獲取當前時間與所選時間之間的時差,您可以使用類似以下的方法:
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Calendar c = Calendar.getInstance();
int totalMinutesSelected = (hourOfDay * 60) + minute;
int totalMinutesNow =(c.get(Calendar.HOUR_OF_DAY) * 60) + c.get(Calendar.MINUTE);
int seconds = (totalMinutesSelected - totalMinutesNow) * 60;
timer = new CounterClass(seconds, 1000);
...
}
在CounterClass
類中,您將必須執行以下操作;
public class CounterClass extends CountDownTimer {
Calendar c = Calendar.getInstance();
...
public void onTick(long millisUntilFinished) {
c.setTimeInMillis(System.currentTimeMillis() + millisUntilFinished);
String hms = String.format("%02d:%02d:%02d", c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), c.get(Calendar.SECOND));
...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.