我试图通过使用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);
请指导我,同样可以做的最好的事情。
答案 0 :(得分:3)
在这种情况下,如果Handler
也可以手动滑动,那么我认为使用TimerTask
比ViewPager
更好。
首先全局创建一个Handler
和Runnable
。
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);
}