Android小白一枚,最近專案中有一個輪播圖的需求,網上搜了很多資料,也看了多開源庫,但不是bug多就是庫不維護,后來在GitHub上找到一個很棒的輪播圖–BannerViewPager庫推薦個大家,
它的使用方法很簡單,也是我看過其他庫里邊使用最簡單的一個,
1.gradle中添加依賴
在專案的root build.gradle中添加如下配置,這個配置是需要添加到專案根目錄下的gradel檔案中的,
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
然后在專案app目錄下的gradle中添加BannerViewPager的依賴:
implementation 'com.github.zhpanvip:BannerViewPager:3.4.0'
然后在Activity的布局檔案中添加BannerViewPager:
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/banner_view"
android:layout_width="match_parent"
android:layout_margin="10dp"
android:layout_height="160dp" />
2.Banner的頁面布局
這個是我們Banner的item頁面布局檔案,Item的布局必須是"match_parent",否則會拋出一個IllegalStateException.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/banner_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
</RelativeLayout>
3.撰寫Adapter
創建一個BannerAdapter并集成BaseBannerAdapter,BaseBannerAdapter是一個泛型類,需要指定Item的資料的物體類,然后重寫getLayoutId方法,回傳上邊寫的布局檔案,最后重寫bindData方法,并這個方法里邊系結資料即可
public class BannerAdapter extends BaseBannerAdapter<BannerData> {
@Override
protected void bindData(BaseViewHolder<BannerData> holder, BannerData data, int position, int pageSize) {
ImageView imageView = holder.findViewById(R.id.banner_image);
Glide.with(imageView).load(data.getImageUrl()).into(imageView);
}
@Override
public int getLayoutId(int viewType) {
return R.layout.item_banner;
}
}
(5)在Activity中創建BannerViewPager
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BannerViewPager<BannerData> bannerViewPager = findViewById(R.id.banner_view);
bannerViewPager.setAdapter(new BannerAdapter())
.setLifecycleRegistry(getLifecycle())
.create(getBannerData());
}
private List<BannerData> getBannerData() {
List<BannerData> list = new ArrayList<>();
BannerData bannerData1 = new BannerData();
bannerData1.setImageUrl("https://ss1.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/a044ad345982b2b75133e15130adcbef77099bf3.jpg");
BannerData bannerData2 = new BannerData();
bannerData2.setImageUrl("https://ss0.baidu.com/94o3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/d009b3de9c82d1582442d267820a19d8bd3e4220.jpg");
BannerData bannerData3 = new BannerData();
bannerData3.setImageUrl("https://ss3.baidu.com/9fo3dSag_xI4khGko9WTAnF6hhy/zhidao/pic/item/0824ab18972bd407ff38f2b378899e510eb30984.jpg");
list.add(bannerData1);
list.add(bannerData2);
list.add(bannerData3);
return list;
}
因為上邊代碼中的資料是寫死的,可以直接通過create(getBannerData())方法創建資料,但是如果資料是從服務器拿到的則可以呼叫create()方法,等到拿到服務器資料后在通過refreshData方法重繪即可,代碼如下:
bannerViewPager.setAdapter(new BannerAdapter())
.setLifecycleRegistry(getLifecycle())
.create();
bannerViewPager.refreshData(dataList);
這樣,就完成了一個自動無限輪播的ViewPager了,并且帶有一個默認的圓形指示器,效果如下圖所示:

是不是非常簡單呢?當然,這還是最基本的用法,這個庫還提供了很多的配置,包括頁面樣式,還有很多炫酷的指示器樣式,下邊稍微修改一下代碼:
bannerViewPager.setAdapter(new BannerAdapter())
.setLifecycleRegistry(getLifecycle())
.setIndicatorSliderColor(getResources().getColor(R.color.purple_200), getResources().getColor(R.color.purple_500))
.setIndicatorSlideMode(IndicatorSlideMode.WORM)
.setPageStyle(PageStyle.MULTI_PAGE_OVERLAP)
.setRevealWidth(getResources().getDimensionPixelOffset(R.dimen.margin))
.create(getBannerData());
相比上邊僅僅添加了四行代碼,再來看效果:

哈哈,有沒有很酷!這個庫支持的效果還不僅僅是這些,具體效果大家可以點擊BannerViewPager鏈接到GitHub查看,
最后,歡迎大家點贊呀!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/241043.html
標籤:其他
