一:描述
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'