前言
首先我们来看一下运行的效果,如下所示:
这是在我们的项目中经常会用到的图片轮播效果,一般用于广告图片的展示。
它要求主要实现以下功能:
1)自动播放;
2)无限滑动;
3)手指拖拽图片时暂停自动轮播,松开后继续自动轮播;
4)含动画效果的小圆点指示器。
本文将介绍利用ViewPager实现无限轮播图片,图片下方加上小圆点指示器标记当前位置,并利用Handler实现自动轮播图片。
正文
1、实现自动播放
思路:没隔一段时间让ViewPager更换一次页卡,使用Handler来实现。
1)标记是否自动播放
private boolean isAutoPlay;
2)每隔一段时间使用Handler发送一次更换页卡的任务
// 如果少于2张就不用自动播放了
if (count < 2) {
isAutoPlay = false;
} else {
isAutoPlay = true;
handler = new Handler();
handler.postDelayed(task, delay);
}
3)在任务中每隔一段时间再次发送任务,这样循环发送就实现了自动播放的效果。
private Runnable task = new Runnable() {
@Override
public void run() {
if (isAutoPlay) {
// 位置循环
currentItem = currentItem % (count + 1) + 1;
// 正常每隔3秒播放一张图片
vpImageTitle.setCurrentItem(currentItem);
handler.postDelayed(task, delay);
} else {
// 如果处于拖拽状态停止自动播放,会每隔5秒检查一次是否可以正常自动播放。
handler.postDelayed(task, 5000);
}
}
};
2、实现无限滑动
思路:设置页卡视图列表时,在前后额外各加一个页卡。最前面加最后一张图片,最后面加第1张图片。然后每当切换到最前的页卡时,就替换成倒数第2个页卡;每当切换到最后的页卡时,就替换成第2个页卡。这样一来就形成了连贯,自然实现了无限滑动的功能。