跟ViewHolder说再见!实现一个无限轮播图究竟有多简单?

去年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 'https://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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值