android 使用 recyclerview 渲染服务端图片列表不显示?
Recyclerview
的 layout
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<ImageView
android:id="@+id/image"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
tools:src="@drawable/background"
/>
适配器代码如下:
public class ImageRecyclerViewAdapter extends RecyclerView.Adapter<ImageViewHolder> {
private final Activity activity;
private final List<String> images;
public ImageRecyclerViewAdapter(Activity activity, List<String> images) {
this.activity = activity;
this.images = images;
}
@NonNull
@NotNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
// 注意第三个参数;仅返回视图,不附加视图到parent
View view = inflater.inflate(R.layout.recyclerview_item_image, parent, false);
return new ImageViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull @NotNull ImageViewHolder holder, int position) {
String src = this.images.get(position);
ImageView imageView = holder.getImageView();
// 填充src
Glide.with(this.activity.getBaseContext())
.load(src)
.into(imageView);
}
@Override
public int getItemCount() {
return this.images.size();
}
}
通过上述代码渲染视图图片不显示!如果给图片布局设置一个高度又可以正常显示,这是为什么?
回复
1个回答
test
2024-06-26
可能是因为你的 ImageView 在布局文件里的 layout_height 设置成了 wrap_content。在加载图片的时候,因为图片还没有被加载进来,系统不知道图片的大小,所以没法正测量到 ImageView 的高度。你可以指定一个高度,android:layout_height="200dp"。或者用占位符:
Glide.with(this.activity.getBaseContext())
.load(src)
.placeholder(R.drawable.placeholder) // 设置占位符
.into(imageView);
还有一种方法就是动态设置ImageView的高度:
Glide.with(this.activity.getBaseContext())
.load(src)
.addListener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
// 根据图片的宽高比设置ImageView的高度
int width = imageView.getWidth();
float aspectRatio = (float) resource.getIntrinsicWidth() / (float) resource.getIntrinsicHeight();
int height = Math.round(width / aspectRatio);
imageView.setLayoutParams(new ViewGroup.LayoutParams(width, height));
return false;
}
})
.into(imageView);
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容