使用计时器任务控制视图寻呼机幻灯片

Control View Pager Slides with Timer Task

我正在尝试通过使用 TimerTask class 自动滑动我的 ViewPager,似乎我没有适当的延迟和周期,它滑动得太快了。我尝试了所有可能的 delay 和 period 参数组合,但没有任何运气,仍然如此烦人的快速滑动。下面是代码:

class SliderTimer extends TimerTask {
    @Override
    public void run() {
        HomeActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (viewPager.getCurrentItem() < listSlides.size() - 1) {
                    viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
                } else {
                    viewPager.setCurrentItem(0);
                }
            }
        });
    }
}

以及实现:

Timer timer = new Timer();
timer.scheduleAtFixedRate(new HomeActivity.SliderTimer(), 10000, 10000);

请指导我,最好的办法是什么。

试试这个...

public static final long DELAY_MS = 2000;
public static final long PERIOD_MS = 4000;

new MyTimerHeader(DELAY_MS, PERIOD_MS, viewPager, images_total_length);

public MyTimerHeader(long DELAY_MS, long PERIOD_MS, final ViewPager slider1, final 
int image_name) {
    final int image_name1=image_name;

    final Handler handler = new Handler();
    final Runnable Update = new Runnable() {
        public void run() {

            int currentPage = slider1.getCurrentItem();

            if (currentPage == image_name1 - 1) {
                currentPage = 0;
            }
            else {
                currentPage = currentPage + 1;
            }
            slider1.setCurrentItem(currentPage);
        }



    };

    Timer timer = new Timer(); // This will create a new Thread
    timer .schedule(new TimerTask() { // task to be scheduled

        @Override
        public void run() {

            handler.post(Update);

        }
    }, DELAY_MS, PERIOD_MS);
}

如果 ViewPager 也可以手动滑动,我认为在这种情况下使用 HandlerTimerTask 更好。 首先全局创建一个HandlerRunnable

private Handler handler=new Handler();
private Runnable runnable=new Runnable() {
    @Override
    public void run() {
        if(pagerSlider.getCurrentItem()==data.size()-1){
            pagerSlider.setCurrentItem(0,false);
        }else{
            pagerSlider.setCurrentItem(pagerSlider.getCurrentItem()+1);
        }
    }
};

Post里面的runnable onPageChange.

 pagerSlider.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            handler.removeCallbacks(runnable);
            handler.postDelayed(runnable,2000);
        }
    });

您需要 post 第一次休息听众会做。根据您的需要更改延迟:-

handler.postDelayed(runnable,2000);

我刚刚意识到您可能会问滚动速度。为此,您需要使用 Customize Scroller。 Go to This thread