android 使用 recyclerview 渲染服务端图片列表不显示?

Recyclerviewlayout 布局文件如下:

<?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();

}

}

通过上述代码渲染视图图片不显示!如果给图片布局设置一个高度又可以正常显示,这是为什么?


回答:

可能是因为你的 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);

以上是 android 使用 recyclerview 渲染服务端图片列表不显示? 的全部内容, 来源链接: utcz.com/p/945351.html

回到顶部