android viewpager 不间断自动滚动
Non stop auto scroll of viewpager in android
我已经使用计时器自动滑动 viewpager。但在到达最后一页后,计时器停止。如何让它再次从第一页继续?
final Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
public void run() {
pager.setCurrentItem(page++);
}
};
int delay = 1000; // delay for 1 sec.
int period = 4000; // repeat every 4 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
mHandler.post(mUpdateResults);
}
}, delay, period);
final Runnable mUpdateResults = new Runnable() {
public void run() {
int numPages = pager.getAdapter().getCount();
page = (page + 1) % numPages;
pager.setCurrentItem(page);
}
};
这将在超出寻呼机限制时将当前项目设置为 0
以下回答会有所帮助;
TimerTask timer = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
int numPages = viewPager.getAdapter().getCount();
page = (page + 1) % numPages;
viewPager.setCurrentItem(page);
}
});
}
};
Timer time = new Timer();
time.schedule(timer, 0, 5000);
2021 年最新答案
设置 viewPager 适配器后
private Runnable runnable = null;
public void function DisplaySlider(){
sliderItemAdapter = new SliderItemAdapter(getActivity(), mSliderList);//push the data to the adapter
mViewPager.setAdapter(sliderItemAdapter); //set the adapter to the view pager
startAutoSlider(sliderItem.getCount());
}
private void startAutoSlider(final int count) {
runnable = new Runnable() {
@Override
public void run() {
int pos = mViewPager.getCurrentItem();
pos = pos + 1;
if (pos >= count) pos = 0;
mViewPager.setCurrentItem(pos);
handler.postDelayed(runnable, 3000);
}
};
handler.postDelayed(runnable, 3000);
}
最后不要忘记从回调中释放内存
@Override
public void onDestroy() {
if (runnable != null) handler.removeCallbacks(runnable);
super.onDestroy();
}
Please try this once.
val handler = Handler()
var page: Int? = 0
val Update = Runnable {
val numPages: Int = yourList.size
page = (page?.plus(1))?.rem(numPages)
viewPager!!.setCurrentItem(page!!, true)
}
val timer: Timer = Timer()
timer!!.schedule(object : TimerTask() {
// task to be scheduled
override fun run() {
handler.post(Update)
}
}, 4000, 4000)
我已经使用计时器自动滑动 viewpager。但在到达最后一页后,计时器停止。如何让它再次从第一页继续?
final Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
public void run() {
pager.setCurrentItem(page++);
}
};
int delay = 1000; // delay for 1 sec.
int period = 4000; // repeat every 4 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
mHandler.post(mUpdateResults);
}
}, delay, period);
final Runnable mUpdateResults = new Runnable() {
public void run() {
int numPages = pager.getAdapter().getCount();
page = (page + 1) % numPages;
pager.setCurrentItem(page);
}
};
这将在超出寻呼机限制时将当前项目设置为 0
以下回答会有所帮助;
TimerTask timer = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
int numPages = viewPager.getAdapter().getCount();
page = (page + 1) % numPages;
viewPager.setCurrentItem(page);
}
});
}
};
Timer time = new Timer();
time.schedule(timer, 0, 5000);
2021 年最新答案 设置 viewPager 适配器后
private Runnable runnable = null;
public void function DisplaySlider(){
sliderItemAdapter = new SliderItemAdapter(getActivity(), mSliderList);//push the data to the adapter
mViewPager.setAdapter(sliderItemAdapter); //set the adapter to the view pager
startAutoSlider(sliderItem.getCount());
}
private void startAutoSlider(final int count) {
runnable = new Runnable() {
@Override
public void run() {
int pos = mViewPager.getCurrentItem();
pos = pos + 1;
if (pos >= count) pos = 0;
mViewPager.setCurrentItem(pos);
handler.postDelayed(runnable, 3000);
}
};
handler.postDelayed(runnable, 3000);
}
最后不要忘记从回调中释放内存
@Override
public void onDestroy() {
if (runnable != null) handler.removeCallbacks(runnable);
super.onDestroy();
}
Please try this once.
val handler = Handler()
var page: Int? = 0
val Update = Runnable {
val numPages: Int = yourList.size
page = (page?.plus(1))?.rem(numPages)
viewPager!!.setCurrentItem(page!!, true)
}
val timer: Timer = Timer()
timer!!.schedule(object : TimerTask() {
// task to be scheduled
override fun run() {
handler.post(Update)
}
}, 4000, 4000)