由于最近更新了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; } } }