这可能是全网最好用的Banner轮播库

9,887 阅读3分钟

自上篇文章《打造一个丝滑般自动轮播无限循环Android库》发布之后BannerViewPager又迎来了众多功能更新(还不了解BannerViewPager的同学可以戳上边链接查看)。现在的BannerViewPager已经具有非常丰富的API接口,功能十分强大。它几乎可以支持市面上所有的Banner样式。大家可以先下载Apk体验,效果会比看GIF好很多哦!demo apk存放在github上,下载速度可能会比较慢。

点击或扫描二维码下载apk

扫码下载apk 接下来一起来看下BannerViewPager有哪些新增功能吧。

一.新增setPageStyle(int)

通过setPageStyle(int)一行代码开启一屏三页模式,一屏三页模式下目前有三种样式,分别如下图所示:

MULTI_PAGEMULTI_PAGE_SCALEMULTI_PAGE_OVERLAP
MULTI_PAGE MULTI_PAGE_SCALE MULTI_PAGE_OVERLAP
点击查看PageStyle示例代码

二.新增setIndicatorStyle(int)

同样通过setIndicatorStyle(int)一行代码来改变indicator的样式,目前BannerViewPager中内置CIRCLE和DASH两种样式。而BannerViewPager的强大之处在于当内置样式不满足需求的情况下可以通过setIndicatorView(IIndicator)来设置自定义的指示器(如图:自定义),自定义指示器通过自定义View可实现任意的样式哦!。

CIRCLEDASH自定义
在这里插入图片描述在这里插入图片描述在这里插入图片描述
点击查看IndicatorStyle示例代码

三.支持Indicator位置任意摆放。

指示器位于Banner下方
指示器位于Banner下方
上图中将Indicator放在了Banner的下方。其实Indicator是支持摆放在任意位置的。之所以能做到任意摆放位置是因为自定义指示器替换了内置的IndicatorView,也就是说此时的IndicatorView已经脱离了BannerViewPager,也就理所当然的可以放在任意位置了。接下来通过代码来看下如何实现:

1.Xml布局文件如下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.zhpan.bannerview.BannerViewPager
        android:id="@+id/banner_view"
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:layout_marginTop="20dp"
        app:bvp_page_style="multi_page" />

    <com.zhpan.bannerview.indicator.CircleIndicatorView
        android:id="@+id/indicator_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/banner_view"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp" />
 </RelativeLayout>

2.通过setIndicatorView(IIndicator)替换指示器

    CircleIndicatorView indicatorView = findViewById(R.id.indicator_view);
 	mViewPager.setPageStyle(PageStyle.MULTI_PAGE_OVERLAP)
              .setIndicatorVisibility(View.GONE)
              .setIndicatorView(indicatorView)
              .setIndicatorColor(Color.parseColor("#888888"),
                   Color.parseColor("#118EEA"))
              .setPageMargin(BannerUtils.dp2px(10))
              .setRevealWidth(BannerUtils.dp2px(10))
              .setHolderCreator(() -> new ImageResourceViewHolder(BannerUtils.dp2px(5)))
              .create(mDrawableList);

注意下面两行代码

mViewPager.setIndicatorVisibility(View.GONE)
          .setIndicatorView(indicatorView)

可以看到通过setIndicatorVisibility(View.GONE)隐藏了内部IndicatorView,在实际开发中是不需要添加这行代码的。因为在demo中切换不同的PageStyle时影响了BannerViewPager内部IndicatorView的创建,所以需要手动隐藏。但在实际开发中不必再调用setIndicatorVisibility(View.GONE)来隐藏内部的指示器

四.其它新增API

1.setCurrentItem(int item)与getCurrentItem()

在2.3.5版本中新添加的两个API。

setCurrentItem(int item)切换到指定的页面。

getCurrentItem()获取当前页面的position。

2.setPageMargin(int pageMargin)

在2.4.0版本中新添加了setPageMargin(int pageMargin),可以设置BannerViewPager页面的间距。

3.setIndicatorMargin(int left, int top, int right, int bottom)

2.4.1版中中新增了设置setIndicatorMargin(int left, int top, int right, int bottom)的接口。便于调节IndicatorView距离BannerViewPager的距离。

4. setOnPageChangeListener(OnPageChangeListener l)

2.4.3(该版本目前暂未发布)版本新增对于页面状态的监听,可以方便在切面切换后做些操作,比如切换到最后一页后显示出一个Buttong。

5.disableTouchScroll(boolean disableTouchScroll)

同样是在2.4.3(该版本目前暂未发布)版本中新增disableTouchScroll,用来禁止手指滑动切换页面。

五.未来计划

未来版本中将针对目前存在的问题进行优化更新,并会着重提升BannerViewPager性能。文章末尾放源码链接,欢迎start。

源码戳此处