Android 带有计时器任务的控件视图寻呼机幻灯片

Android 带有计时器任务的控件视图寻呼机幻灯片,android,android-viewpager,timertask,Android,Android Viewpager,Timertask,我试图通过使用TimerTask类自动滑动我的ViewPager,似乎我没有适当的延迟和周期,它滑动得太快了。我尝试了所有可能的延迟和周期参数组合,但没有任何运气,仍然是如此恼人的快速滑动。代码如下: class SliderTimer extends TimerTask { @Override public void run() { HomeActivity.this.runOnUiThread(new Runnable() { @Ove

我试图通过使用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);
                }
            }
        });
    }
}
请指导我,同样的,什么是最好的。

试试这个

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
也可以手动滑动,那么在这种情况下使用
Handler
TimerTask
更好。 首先全局创建
处理程序
可运行

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

我刚意识到你可能在问滚动速度。为此,您需要使用自定义滚动条

你们需要多快?我有30个项目,所以每个项目延迟1秒将不胜感激。若用户手动启动幻灯片呢?这将变得一团糟。要避免这种情况,请在
onpagechangeelistener
中使用
Handler
。这将如何实现?您可以参考可用的库。这有助于你我是否需要覆盖onPageChange方法?是的,如上所述。我想你是在问滚动速度。为此,我附上了上面的链接。如果这个问题是针对滚动速度的,并且你在上面的链接中找到了解决方案,那么请将其标记为重复。兄弟,请你解释一下如何使用自定义滚动类,对我来说似乎有点困惑。它都在上面的链接中。。我不需要更多的解释。要自动滚动它,你需要使用我上面提供的代码。。
handler.postDelayed(runnable,2000);