带计时器任务的Control View寻呼机幻灯片

时间:2019-03-05 05:02:41

标签: android android-viewpager timertask

我试图通过使用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);

请指导我,同样可以做的最好的事情。

2 个答案:

答案 0 :(得分:3)

在这种情况下,如果Handler也可以手动滑动,那么我认为使用TimerTaskViewPager更好。 首先全局创建一个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内部发布可运行对象。

 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

答案 1 :(得分: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);
}