自上篇文章《打造一个丝滑般自动轮播无限循环Android库》发布以后BannerViewPager又迎来了众多功能更新(还不了解BannerViewPager的同窗能够戳上边连接查看)。如今的BannerViewPager已经具备很是丰富的API接口,功能十分强大。它几乎能够支持市面上全部的Banner样式。你们能够先下载Apk体验,效果会比看GIF好不少哦!demo apk存放在github上,下载速度可能会比较慢。java
经过setPageStyle(int)一行代码开启一屏三页模式,一屏三页模式下目前有三种样式,分别以下图所示:android
MULTI_PAGE | MULTI_PAGE_SCALE | MULTI_PAGE_OVERLAP |
---|---|---|
![]() |
![]() |
![]() |
一样经过setIndicatorStyle(int)一行代码来改变indicator的样式,目前BannerViewPager中内置CIRCLE和DASH两种样式。而BannerViewPager的强大之处在于当内置样式不知足需求的状况下能够经过setIndicatorView(IIndicator)来设置自定义的指示器(如图:自定义),自定义指示器经过自定义View可实现任意的样式哦!。github
CIRCLE | DASH | 自定义 |
---|---|---|
![]() |
![]() |
![]() |
指示器位于Banner下方 |
---|
![]() |
上图中将Indicator放在了Banner的下方。其实Indicator是支持摆放在任意位置的。之因此能作到任意摆放位置是由于自定义指示器替换了内置的IndicatorView,也就是说此时的IndicatorView已经脱离了BannerViewPager,也就理所固然的能够放在任意位置了。接下来经过代码来看下如何实现:app
<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>
复制代码
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)来隐藏内部的指示器。post
在2.3.5版本中新添加的两个API。性能
setCurrentItem(int item)切换到指定的页面。优化
getCurrentItem()获取当前页面的position。
在2.4.0版本中新添加了setPageMargin(int pageMargin),能够设置BannerViewPager页面的间距。
2.4.1版中中新增了设置setIndicatorMargin(int left, int top, int right, int bottom)的接口。便于调节IndicatorView距离BannerViewPager的距离。
2.4.3(该版本目前暂未发布)版本新增对于页面状态的监听,能够方便在切面切换后作些操做,好比切换到最后一页后显示出一个Buttong。
一样是在2.4.3(该版本目前暂未发布)版本中新增disableTouchScroll,用来禁止手指滑动切换页面。
将来版本中将针对目前存在的问题进行优化更新,并会着重提高BannerViewPager性能。文章末尾放源码连接,欢迎start。