【发布时间】:2018-12-18 03:22:01
【问题描述】:
我想使用 Glide 加载具有动态高度的图像。我有一个高度为 wrap_content 且宽度为 match_parent 的 ImageView。当回收站视图第一次加载时。第一个图像的高度比其余图像大。当我向下滚动视图时,我的较大高度图像加载正常,没有任何像素化,当我滚动回顶部到第一个较大的图像时,它会像素化图像由于它变得像素化。我不想在 recyclerview 上使用 setRecyclable (false)。这是实现
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/drc_imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@color/OFF_WHITE" />
</LinearLayout>
用于加载图像
GlideApp
.with(context)
.asBitmap()
.fitCenter()
.load(absoluteHomeList.get(position - 1).getDynamic_card_url())
.into(holder.dynamicImageView);
【问题讨论】:
-
首先,在使用 Glide 时,对两个参数都使用 match-parent 或 wrap-content 是非常糟糕的主意。下载时需要计算图像的高度和宽度。 Glide 为此提供了回调。之后,您将高度和宽度设置为 imageview(如果图像的宽度大于设备,则可能需要缩放)。这样,您将拥有一个固定大小的 ImageView。
-
您当前的问题是由于 recyclerview 中视图的可重用性而出现的。滚动同一视图时,另一个视图正在使用。要解决此问题,您还需要将图像的缩放高度/宽度缓存到相应的模态类中。
标签: android android-recyclerview android-glide