简体   繁体   English

倒数计时器运作不正常

[英]Countdown timer is not working correctly

I have a countdown timer that fetches the value of my time picker, and starts counting down when I set the time picker, but what is happening is that It is not counting down to the present time at which you set the time picker. 我有一个倒计时计时器,该计时器可获取我的时间选择器的值,并在设置时间选择器时开始递减计数,但是发生的是它没有倒计时到您设置时间选择器的当前时间。 My question is how can I get my countdown timer to countdown to the present time. 我的问题是如何让我的倒数计时器倒数至目前时间。

Here is my code... 这是我的代码...

   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() {

    }
}

Thanks:) 谢谢:)

You will need to get the difference between the current time and the time that was selected, you can do that using something like this: 您将需要获取当前时间与所选时间之间的时差,您可以使用类似以下的方法:

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);
    ...
}

and in the CounterClass class, you will have to do something like this; 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM