用RecyclerView(ViewPager2)代替ViewPager实现Banner无限循环

一:描述

1: 既然是轮播就是内容模块大致相同,RecyclerView拥有强大的缓存机制可以直接实现相同Item的缓存

2: RecyclerView的Adapter可以针对不同Item的 ViewType来缓存不同的Item

3: ViewPager在生成Item的时候(Object instantiateItem(ViewGroup container, final int position))控件还未添加到ViewPager中,此时生成的Item中的控件的生命周期都没有触发,(比如获取Item控件的大小就无法做到), 而RecyclerView适配器中有onBindViewHolder机制与onViewRecycled, onViewAttachedToWindow,onViewDetachedFromWindow等强大的生命周期机制

4: RecyclerView已经自带的解决了与ViewPager, RecyclerView等滑动控件中的嵌套滑动冲突

5: 当Banner嵌套在RecyclerView或ListView中时, 在Banner滑动动画还结束时,如果列表滑动缓存了banner,此时ViewPager方式的Banner会出现动画停留甚至白屏的效果,而RecyclerView可以完美的解决这问题

6: RecyclerView自带是否预加载(即懒加载)功能,可以垂直方向,水平方向滑动, 及各种很炫的效果, 项目中已经有了

7: 实现无限循环有两种机制, 1: (非常不建议用此方式)把itemcount设置成Integer.Max_VALUE, 但是在页面刷新setCurrentItem的时候会出现卡顿ANR 2: 在实际的iteCount前后添加最后一个和第一个item(这种方式有个BUG就是在快速滑动或者多指滑动时会到达边界点就滑不动了), 但是ViewPager是需要预加载的, 在滑动到最后一项快速换位的时候,会出现空白, 这里的无限循环是在前后增加一定的数量的item

嵌套在RecyclerView中的方式



垂直与水平方向

二:功能及要解决的问题

1: Banner指示器 亦可用于ViewPager, ViewPager2等的指示器使用简单, 可用引导界面, 只需要配置indicatorDrawable可以实现任何drawable的指示器效果如上图, 并在BannerPager中setupWithIndicator(IndicatorView indicatorView) 直接绑定指示器

```

android:id="@+id/iv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="bottom|center_horizontal"

android:layout_marginBottom="10dp"

app:indicatorDrawable="@drawable/bg_banner2"

app:indicatorOrientation="horizontal"

app:indicatorMargin="10dp"/>

```

2. 增加BannerPager.setLifecycleOwner(LifecycleOwner owner)方法让BannerPager在Activity/Fragment/ RecyclerView中使用更加简单方便,只要设置好适配器其他不用管

3. 在第一个版本中BannerPager的Adapter直接使用Recycler.Adapter这将导致ViewHolder在使用时getPostion,getAdapterPosition会获取到错误的数据, 迭带版本已经优化此问题

4. 修改RecyclerView滑动动画时间, 且当动画时间较长时在停止Banner时较正当前item的位置

5. 无限滑动时, 在滑动到末尾时校正当前position的防止重复onBindViewHolder处理

6.没有那些过渡的封装, 就简单几个类, 示例代码中有DataBinding的方式, 您可以尽情的扩展

implementation  'com.github.youxiaochen:RecyclerViewBanner:1.2.1'

最后源码地址 https://github.com/youxiaochen/RecyclerViewBanner

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容