由于最近更新了studio,好多东西需要更新,那就彻底一点吧,banner原来用的1.4.9的,新版的更新了好多,之前的方法不能用了,不多说直接上代码。
依赖:
implementation 'com.youth.banner:banner:2.1.0'
<com.youth.banner.Banner
android:id="@+id/banner_index"
android:layout_width="match_parent"
android:layout_height="150dp" />
宽高根据你情况设置。
banner.addBannerLifecycleObserver(this)
.setAdapter(new ImageAdapter(list))
.setIndicator(new CircleIndicator(this));
实体类,考虑到你的图片类型可能是Sting,也可能是int类型,所以我用了object,下面代码可直接复制。
public class ImageBean {
Object img;
public ImageBean(Object img) {
this.img = img;
}
public ImageBean() {
}
public Object getImg() {
return img;
}
public void setImg(Object img) {
this.img = img;
}
@Override
public String toString() {
return "ImageBean{" +
"img=" + img +
'}';
}
}
适配器,可直接复制。
public class ImageAdapter extends BannerAdapter<ImageBean, ImageAdapter.BannerViewHolder> {
Context context;
public ImageAdapter(List<ImageBean> datas) {
super(datas);
}
@Override
public ImageAdapter.BannerViewHolder onCreateHolder(ViewGroup parent, int viewType) {
context = parent.getContext();
ImageView imageView = new ImageView(parent.getContext());
//注意,必须设置为match_parent,这个是viewpager2强制要求的
imageView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
return new BannerViewHolder(imageView);
}
@Override
public void onBindView(ImageAdapter.BannerViewHolder holder, ImageBean data, int position, int size) {
// holder.imageView.setImageResource(data.getImg());
Glide.with(context).load(data.getImg()).into(holder.imageView);
}
public class BannerViewHolder extends RecyclerView.ViewHolder {
private final ImageView imageView;
public BannerViewHolder(@NonNull ImageView itemView) {
super(itemView);
this.imageView = itemView;
}
}
}
源码连接:https://github.com/youth5201314/banner |