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

问题描述 投票:1回答:2

我试图通过使用TimerTask类自动滑动我的ViewPager,似乎我没有适当的延迟和周期,它滑动如此之快。我尝试了所有可能的延迟和周期参数组合而没有任何运气,仍然如此烦人的快速滑动。以下是代码:

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

请指导我,同样可以做到最好。

android android-viewpager timertask
2个回答
3
投票

我认为在这种情况下使用HandlerTimerTask更好,如果ViewPager也可以手动滑动。首先在全球范围内创建一个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);
        }
    }
};

张贴在onPageChange内的runnable。

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

你需要第一次发帖,听众会这样做。根据您的需要更改延迟: -

handler.postDelayed(runnable,2000);

我只是意识到你可能会问滚动速度。那么你需要使用Customize Scroller。 Go to This thread


0
投票

试试这个......

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.