一:描述
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
二:功能及要解决的问题
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'