国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

三層繼承ViewPager實現無限輪播圖Banner

2019-11-08 00:29:36
字體:
來源:轉載
供稿:網友

概述:

很多項目中都有無限輪播圖,猶如網易新聞頂部的輪播圖等,是一個很常見的控件。有很多人寫(詳見codeKK),這塊按照自己的思路寫一遍,三層繼承ViewPager實現之,使得代碼清晰,改動方便。

代碼在github上 LoopViewPager

現在做成了一個Library,包含無限輪播圖、小紅點Indicator和寬高比例的RationFrameLayout。很方便使用。

該控件特點:

使用三層繼承關系,分工明確.

頂層使用LoopView,該控件繼承ViewGroup,是一個可以無限輪播的ViewPager第二層使用Trina的AutoScrollViewPager,作為啟動器.第三層AdvancedLoopViewPager,用于功能增強。可以自定義Measure或者事件分發。

ViewPager的Adapter 和 ipageIndicator 都支持notifyDateSetChanged()方法. 可以通過該方法改變數據源.

支持setCurrentItem()方法. 通過viewPager.setCurrentItem(2)設置. 并且在viewPager中設置后,indicator中不用設置,直接跟著變化.

提供了IPageIndicator接口,可以實現自己的Indicator. 寫法都很固定,無論是繼承View還是ViewGroup.

注意: 在adapter中必須要復寫getItemPosition方法,使用Fragment的話必須使用FragmentStatePagerAdapter. public int getItemPosition(Object object) { return POSITION_NONE; }

實現: 在 github上查看更多。

loopVp


思考步驟: 1. 實現無限輪播的ViewPager 2. 實現自動輪播 3. 實現綁定在指示器Indicator

實現步驟:

1. 實現無限輪播圖:

目前實現無限輪播圖的有幾種寫法:

使ViewPager的條目個數為Integer.MAX_VALUE。使用LoopingViewPager。開源項目LoopViewPagercodeKK上有使用RecyclerView實現的,值得學習。

這些實現方式自己都實現過,最終采用第三種,使用LoopViewPager,該控件繼承ViewGroup,實現了一個無限循環的ViewPager。

16/6/22解決數據只有兩張時左右擺動bug,添加另外兩個相同的數據,同時同步處理indicator數據。

如果你要使用Integer.MAX_VALUE,直接將繼承關系改變,使LoopViewPager繼承MaxValueViewPager就行,不用改變其他代碼。(不過MaxValueViewPager在滑動時候的表現十分令人失望。)

LoopingViewPager的閃爍現象不能很好的解決,另外對notifyDataSetChanged會出現意想不到的bug,也不能向adapter中傳入一個固定的List作為數據源

2. 使用AutoScrollViewPager實現自動輪播:

使用Trina的AutoScrollViewPager。

使AutoScrollViewPager繼承LoopViewPager,作為啟動器。

3.再繼承一層,增強功能

創建AdvancedLooperViewPager,繼承AutoScrollViewPager,增強功能。 在自己創建的這個類中,可以增強功能,需要什么就實現什么。比如可以像FlycoBanner將indicator寫在這個類中。在此不這么做,將會單獨抽取,方便替換。

增強的功能:

實現對高度的wrap_content的支持。相應的添加scale屬性。方便使用者定義寬高比例。如果layout_height為確定值(比如300dp),那么以該確定值為準。更多功能 to be continued…

4. 實現Indicator指示器:

關于指示器寫法: 1. 繼承View全部在onDraw()方法里寫 2. 繼承ViewGroup,添加ImageView等。

這塊將會拿出來單獨學習,在這里就繼承View實現了一個SimpleCircleIndicator,但同時提供了接口可以實現自己的indicator。


5. 添加其他效果

關于pageTransformer可查看: ViewPagerTransformer學習 添加其他PageIndicator,把現在比較好的拿過來用了,適配了一下LoopViewPager。

參考:

viewpager: LoopingViewPager Trinea的android-auto-scroll-view-pager

indicator: JakeWharton的ViewPagerIndicator. github circleIndicator github circleIndicator

已經有的無限輪播圖: FlycoBanner


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 密山市| 浮山县| 温州市| 仙居县| 左权县| 祁门县| 西乌| 喜德县| 金阳县| 探索| 松溪县| 武定县| 林口县| 盈江县| 庐江县| 汶川县| 金塔县| 西丰县| 来宾市| 潞西市| 马山县| 泰安市| 萨迦县| 泸溪县| 赣州市| 武强县| 都昌县| 定襄县| 册亨县| 宝山区| 洪江市| 松原市| 德清县| 若羌县| 临安市| 西乌珠穆沁旗| 徐汇区| 遵义县| 洪泽县| 新乡市| 清镇市|