使用计时器任务控制视图寻呼机幻灯片
Control View Pager Slides with Timer Task
我正在尝试通过使用 TimerTask class 自动滑动我的 ViewPager,似乎我没有适当的延迟和周期,它滑动得太快了。我尝试了所有可能的 delay 和 period 参数组合,但没有任何运气,仍然如此烦人的快速滑动。下面是代码:
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);
请指导我,最好的办法是什么。
试试这个...
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
更好。
首先全局创建一个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);
}
}
};
Post里面的runnable onPageChange
.
pagerSlider.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
handler.removeCallbacks(runnable);
handler.postDelayed(runnable,2000);
}
});
您需要 post 第一次休息听众会做。根据您的需要更改延迟:-
handler.postDelayed(runnable,2000);
我刚刚意识到您可能会问滚动速度。为此,您需要使用 Customize Scroller。 Go to This thread。
我正在尝试通过使用 TimerTask class 自动滑动我的 ViewPager,似乎我没有适当的延迟和周期,它滑动得太快了。我尝试了所有可能的 delay 和 period 参数组合,但没有任何运气,仍然如此烦人的快速滑动。下面是代码:
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);
请指导我,最好的办法是什么。
试试这个...
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
更好。
首先全局创建一个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);
}
}
};
Post里面的runnable onPageChange
.
pagerSlider.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
handler.removeCallbacks(runnable);
handler.postDelayed(runnable,2000);
}
});
您需要 post 第一次休息听众会做。根据您的需要更改延迟:-
handler.postDelayed(runnable,2000);
我刚刚意识到您可能会问滚动速度。为此,您需要使用 Customize Scroller。 Go to This thread。