停止并重新启动计时器

时间:2014-03-09 02:03:46

标签: android

我正在使用一个pagelider和计时器。我为这个pagelider写了一个计时器方法:

public void setTimerToSlider() {

    sliderTimer = new Timer();
    sliderHandler = new Handler();
    sliderTimerTask = new TimerTask() {
        @Override
        public void run() {
            sliderHandler.post(new Runnable() {
                @Override
                public void run() {

                    if (viewPager.getCurrentItem()<images.length-1) {
                        viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
                    } else {
                        viewPager.setCurrentItem(0);
                    }

                }
            });
        }
    };
    sliderTimer.scheduleAtFixedRate(sliderTimerTask, 0, sliderTimeOut*1000);

}

当用户手动滑动时,计时器会继续。因此,例如,如果剩余1秒,当用户滑动时,它会在1秒内进入下一个。

我的目标是当用户手动滑动时,它会重置剩余时间并从0开始超时。

2 个答案:

答案 0 :(得分:1)

您是否在询问如何取消当前计时器并在每次用户输入时开始新计时器?

您分配了Handler。将其用于您的时间而不是Timer。处理程序在Android上更有用,例如Activity生命周期知道如何处理它们。他们也可能使用更少的电池电量。

当新的用户输入事件到达时,请致电sliderHandler.removeMessages(MSG_PAGESLIDER)取消之前的所有计时器,然后call sliderHandler.sendEmptyMessageDelayed(MSG_PAGESLIDER, 1000),其中:

static final int MSG_PAGESLIDER = 1;

class UpdateHandler extends Handler {

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case MSG_PAGESLIDER:
                // react to the timeout; schedule another message if desired
                break;
        }
    }
}

UpdateHandler sliderHandler = new UpdateHandler();

答案 1 :(得分:0)

aaaaaannnnnnnnd你的问题是? (不是我的downvote,顺便说一句,但我们倾向于采用问答形式)

=]

考虑引用日历,它会下降到毫秒,并且不会因为延迟游戏而受到影响

日历日历= Calendar.getInstance();

http://developer.android.com/reference/java/util/Calendar.html

gl hf