Android 带有计时器任务的控件视图寻呼机幻灯片
我试图通过使用TimerTask类自动滑动我的ViewPager,似乎我没有适当的延迟和周期,它滑动得太快了。我尝试了所有可能的延迟和周期参数组合,但没有任何运气,仍然是如此恼人的快速滑动。代码如下: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
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);