效果概述:
- 随着viewpager中页面的滑动,底部的圆点也有拖动效果,支持手势拖动
效果图如下:
实现原理:
- ViewPager 无限轮播,设置了Integer.MAX_VALUE ; 其实也可以设置为前一张后一张,不过麻烦点儿
- 根据ViewPager中图片个数不同,底部显示不同个数的圆点
- 动态加载圆点的同时,记录下圆点的位置,放于集合中
- ViewPager 的setOnPageChangeListener监听,用于设置ViewPager的页面切换时,圆点的动画效果
- 支持手势拖动
遇到的问题
装载圆点的layout在onCreate()中未立即装载,需要动态获取圆点位置的方法失败
解决办法: 网上有说其他的方法;我是直接开了子线程,睡了500ms
手势拖动,使用handler,但会触发setOnPageChangeListener监听,导致立即切换到下一个图片,特别不友好
解决办法:onPageScrollStateChanged方法中判断,状态为1(开始滑动)的时候,hanlder移除掉所有的消息,然后5s后重发消息
3 . 手势拖动,右滑的时候,圆点的移动效果和左滑不同
解决办法:根据当前position判断左滑/右滑(我使用的是Integer.MAX_VALUE),设置不同的动画
核心代码
/*
暴漏出去的item点击事件接口:OnPagerItemClickListnener
需要传递的参数:
item 个数
List
Circle 形状,颜色【包括normal和select】
轮播时间间隔
viewpager加载前图片,加载失败图片
*/
public class MainActivity extends AppCompatActivity {
private ViewPager pager;
private LinearLayout layout;
private List<String> urlList=new ArrayList<>();
private List<Integer> posList=ne