当高度有时更大而宽度有时更大时,覆盖矩形图像可能会导致图像无法正确显示。
这是我所做的,以防万一有人想探索。这修复了在 RecyclerView 上下滚动时缩小图像的 Glide 错误。
仅供参考:我使用的是 androidx 而不是支持库,但它也应该与 ImageView 和 AppCompatImageView 小部件一起使用。
这是 RecyclerView 的项目布局的片段:
<RelativeLayout...
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/attachment_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:background="@drawable/camera_image_preview_default"
android:minWidth="400dp"
android:scaleType="centerCrop" />
</RelativeLayout>
这是我的适配器 onBindViewHolder 覆盖中的代码:
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
....
....
attachmentImage.layout(0, 0, 0, 0);
Glide.with(context)
.load(Uri.fromFile(new File(AppGlobals.IMAGES_THUMBNAIL_STORE_PATH + packet.getImageFileName())))
.placeholder(ResourcesCompat.getDrawable(context.getResources(), R.drawable.image_loading_placeholder, null))
.centerCrop()
.error(ResourcesCompat.getDrawable(context.getResources(), R.drawable.missing_thumbnail, null))
.into(attachmentImage);
....
....
}
如果你注意到,
在 Glide 绑定之前,ImageView 已经设置为布局 0,0,0,0。这将确保 Glide 将其解释为新的布局膨胀,而不是使用缓存策略。
minWidth
已设置为400dp
,而已layout_width
设置为match_parent
并layout_height
已设置为wrap_content
。您可以minWidth
根据您选择的限制进行操作。
绑定将在运行时使用,因此您在设计时在 xml 布局中设置centerCrop()
什么并不重要。scaleType
仅供参考:此示例使用从本地设备的公共外部存储目录加载图像。使用其他实现从网络或 URL 加载
致谢:TWiStErRob 在 Glide Github 社区论坛中提到并推荐了将布局设置为全零。
@ https://github.com/TWiStErRob
对于问题 #1591
https://github.com/bumptech/glide/issues/1591
附带说明一下,如果您在 xml 布局中将 ImageView 设置为绝对layout_height
和layout_width
- 分别为 400dp 和 300dp,Glide 可以完美运行。只有当每个图像的尺寸不同时,人们才会看到问题。