一:描述
1: 既然是輪播就是內(nèi)容模塊大致相同,RecyclerView擁有強(qiáng)大的緩存機(jī)制可以直接實(shí)現(xiàn)相同Item的緩存
2: RecyclerView的Adapter可以針對不同Item的 ViewType來緩存不同的Item
3: ViewPager在生成Item的時(shí)候(Object instantiateItem(ViewGroup container, final int position))控件還未添加到ViewPager中,此時(shí)生成的Item中的控件的生命周期都沒有觸發(fā),(比如獲取Item控件的大小就無法做到), 而RecyclerView適配器中有onBindViewHolder機(jī)制與onViewRecycled, onViewAttachedToWindow,onViewDetachedFromWindow等強(qiáng)大的生命周期機(jī)制
4: RecyclerView已經(jīng)自帶的解決了與ViewPager, RecyclerView等滑動(dòng)控件中的嵌套滑動(dòng)沖突
5: 當(dāng)Banner嵌套在RecyclerView或ListView中時(shí), 在Banner滑動(dòng)動(dòng)畫還結(jié)束時(shí),如果列表滑動(dòng)緩存了banner,此時(shí)ViewPager方式的Banner會出現(xiàn)動(dòng)畫停留甚至白屏的效果,而RecyclerView可以完美的解決這問題
6: RecyclerView自帶是否預(yù)加載(即懶加載)功能,可以垂直方向,水平方向滑動(dòng), 及各種很炫的效果,?項(xiàng)目中已經(jīng)有了
7: 實(shí)現(xiàn)無限循環(huán)有兩種機(jī)制, 1: (非常不建議用此方式)把itemcount設(shè)置成Integer.Max_VALUE, 但是在頁面刷新setCurrentItem的時(shí)候會出現(xiàn)卡頓ANR 2: 在實(shí)際的iteCount前后添加最后一個(gè)和第一個(gè)item(這種方式有個(gè)BUG就是在快速滑動(dòng)或者多指滑動(dòng)時(shí)會到達(dá)邊界點(diǎn)就滑不動(dòng)了), 但是ViewPager是需要預(yù)加載的, 在滑動(dòng)到最后一項(xiàng)快速換位的時(shí)候,會出現(xiàn)空白,?這里的無限循環(huán)是在前后增加一定的數(shù)量的item


二:功能及要解決的問題
1: Banner指示器?亦可用于ViewPager, ViewPager2等的指示器使用簡單,?可用引導(dǎo)界面,?只需要配置indicatorDrawable可以實(shí)現(xiàn)任何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中使用更加簡單方便,只要設(shè)置好適配器其他不用管
3.?在第一個(gè)版本中BannerPager的Adapter直接使用Recycler.Adapter這將導(dǎo)致ViewHolder在使用時(shí)getPostion,getAdapterPosition會獲取到錯(cuò)誤的數(shù)據(jù),?迭帶版本已經(jīng)優(yōu)化此問題
4.?修改RecyclerView滑動(dòng)動(dòng)畫時(shí)間,?且當(dāng)動(dòng)畫時(shí)間較長時(shí)在停止Banner時(shí)較正當(dāng)前item的位置
5.?無限滑動(dòng)時(shí), 在滑動(dòng)到末尾時(shí)校正當(dāng)前position的防止重復(fù)onBindViewHolder處理
6.沒有那些過渡的封裝,?就簡單幾個(gè)類,?示例代碼中有DataBinding的方式,?您可以盡情的擴(kuò)展
implementation? 'com.github.youxiaochen:RecyclerViewBanner:1.2.1'