官网效果挺好看的:



不过需求不需要指示器
笔者的实现效果如图:
PageStyle.NORMAL

PageStyle.MULTI_PAGE

PageStyle.MULTI_PAGE_OVERLAP

笔者集成到MyAndroid项目里了,做了一定的修改。后面可能还会修改参数。UI设计大佬给的效果难度比较大哦!
定制化可参考https://gitee.com/lc951/my-android
简单使用参考Github开源即可
记录一下使用过程中的难点
定制笔者的效果参考下面代码:
BannerViewPager<CardOverlayModel, CardOverlayViewHolder> bannerViewPager = findViewById(R.id.banner_view);
bannerViewPager.setOnPageClickListener(new BannerViewPager.OnPageClickListener() {
@Override
public void onPageClick(int position) {
Toast.makeText(CardOverlayActivity.this, "position:" + position, Toast.LENGTH_SHORT)
.show();
}
})
.setAutoPlay(false)
.setPageStyle(PageStyle.MULTI_PAGE_SCALE)
.setRevealWidth(BannerUtils.dp2px(30))
.setHolderCreator(() -> new CardOverlayViewHolder(this))
.create(list);
主要是setPageStyle(PageStyle.MULTI_PAGE_SCALE)和setRevealWidth(BannerUtils.dp2px(30))
布局如下:
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/banner_view"
android:layout_width="match_parent"
android:layout_margin="10dp"
android:layout_height="160dp" />
可能也许需要下面这段
public class CardOverlayViewHolder implements ViewHolder<CardOverlayModel> {
private Context context;
public CardOverlayViewHolder(Context context) {
this.context=context;
}
@Override
public int getLayoutId() {
return R.layout.item_viewpager;
}
@Override
public void onBind(View itemView, CardOverlayModel data, int position, int size) {
ImageView imageView = itemView.findViewById(R.id.card_iv);
if(!TextUtils.isEmpty(data.getCoverUrl())){
Glide.with(context)
.load(data.getCoverUrl())
.error(R.mipmap.ic_img02)
.placeholder(R.mipmap.ic_img01)
.into(imageView);
}
}
}
使用效果很好。集成难度有些。耐心点慢慢理解都能克服哈!
-keep class androidx.recyclerview.widget.**{*;}
-keep class androidx.viewpager2.widget.**{*;}
https://github.com/zhpanvip/BannerViewPager/blob/master/README_CN.md