跟ViewHolder說再見!實現一個無限輪播圖究竟有多簡單?

語言: CN / TW / HK

去年8月份,我在Github開源了一個無限迴圈的輪播相簿---BannerViewPager(以下簡稱BVP)。時至今日,一年多的時間過去了,BVP在大家的支援下已經在GitHub上收穫了1.9k的Star。前段時間,我將BVP遷移到了Gitee,也很有幸受到了Gitee官方的認可,並得到了Gitee官方的推薦,短時間內在Gitee上收穫了近120個Star。當然,能夠卻得這麼大的成績離不開大家的支援。

BVP最初的目標是做一個全網最好用的輪播相簿,讓大家用盡可能少的程式碼實現任意想要的效果。現在回頭看看,那些吹過的牛似乎也在慢慢實現。今年四月份,BVP迎來了3.0版本的重大更新---從ViewPager遷移到了ViewPager2。在3.0版本中BVP的API向ViewPager2對齊,並且大幅優化了程式碼結構。使得BVP在使用上大幅簡化。

而在近期的3.4.0版本中,BVP又進行了一次重要更新。這次更新使得開發者無需開發者無需再編寫ViewHolder類,這一優化讓BVP的使用進一步簡化。那麼讓我們來看一下使用最新版本的BVP實現一個無限迴圈輪播圖究竟有多簡單吧。

1.gradle中新增依賴

在專案根目錄的build.gradle中新增如下配置:

allprojects {
		repositories {
			...
			maven { url 'http://www.jitpack.io' }
		}
	}
	
複製程式碼

然後在app目錄下的gradle中新增依賴:

implementation 'com.github.zhpanvip:BannerViewPager:3.4.0'
複製程式碼

2.繼承BaseBannerAdapter,並重寫相關方法

重寫getLayoutId方法,並在這個方法中返回Item佈局。然後重寫bindData方法,在這個方法中通過BaseViewHolder進行資料繫結。

class SimpleAdapter : BaseBannerAdapter<CustomBean>() {

    override fun bindData(holder: BaseViewHolder<CustomBean>, data: CustomBean?, position: Int, pageSize: Int) {
        holder.setImageResource(R.id.banner_image, data!!.imageRes)
    }

    override fun getLayoutId(viewType: Int): Int {
        return R.layout.item_custom_view;
    }
}
複製程式碼

3.在Activity中構建BannerViewPager

    private lateinit var mViewPager: BannerViewPager<CustomBean>
    ...

    private fun setupViewPager() {
              mViewPager = findViewById(R.id.banner_view)
              mViewPager.apply {
                  adapter = SimpleAdapter()
                  setLifecycleRegistry(lifecycle)
              }.create(getPicList(4))
          }
複製程式碼

OK!到這裡一個頁面自動切換、無限迴圈且帶有指示器的輪播圖就完成了!沒錯,就是這麼簡單,就是這麼不講武德!!還是執行起來看下效果吧。 在這裡插入圖片描述

有同學可能說,這個效果太難看了。我們產品說想要一個炫酷一點的。沒關係,這是一個加參(jiā)數(qián)就能解決的問題。看程式碼:

mViewPager.apply {
            adapter = SimpleAdapter()
            setLifecycleRegistry(lifecycle)
            setScrollDuration(800)
            setRevealWidth(resources.getDimensionPixelOffset(R.dimen.dp_15))
            setPageStyle(PageStyle.MULTI_PAGE_OVERLAP)
            setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
            setIndicatorSliderRadius(resources.getDimensionPixelOffset(R.dimen.dp_4), resources.getDimensionPixelOffset(R.dimen.dp_6))
            setIndicatorSlideMode(IndicatorSlideMode.SCALE)
        }.create(getPicList(4))
複製程式碼

執行起來看下效果:

在這裡插入圖片描述

什麼?產品小姐姐還不滿意?沒關係,現在就把BVP的文件摔到她臉上,讓她 隨!便!挑!包她滿意。

最後歡迎大家到Github關注BVP,你的Star是給我最大的支援!

Github連線:BannerViewPager

Gitee連線 : BannerViewPager