Android 回收器视图中的动态图像高度

Android 回收器视图中的动态图像高度,android,android-recyclerview,android-glide,Android,Android Recyclerview,Android Glide,我想使用Glide加载动态高度的图像。我有一个ImageView,它的高度是wrap\u content,宽度是match\u parent。当回收器视图第一次加载时。第一个图像的高度大于其余图像的高度。当我向下滚动视图时,我的较大高度图像加载良好,没有任何像素化。当我向下滚动视图时,视图被回收。当我向后滚动到第一个较大的图像时,它被像素化。我认为当视图被回收时,glide使用较小的recycler imageview height对较大高度的图像进行下采样,因为它被像素化。我不想在recycl

我想使用Glide加载动态高度的图像。我有一个ImageView,它的高度是wrap\u content,宽度是match\u parent。当回收器视图第一次加载时。第一个图像的高度大于其余图像的高度。当我向下滚动视图时,我的较大高度图像加载良好,没有任何像素化。当我向下滚动视图时,视图被回收。当我向后滚动到第一个较大的图像时,它被像素化。我认为当视图被回收时,glide使用较小的recycler imageview height对较大高度的图像进行下采样,因为它被像素化。我不想在recyclerview上使用setRecycleable(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>
以下是供参考的图片


在使用glide加载图像之前使用

holder.dynamicImageView.layout(0,0,0,0);

在使用glide加载图像之前,请使用

holder.dynamicImageView.layout(0,0,0,0);

首先,在使用Glide时,为两个参数使用匹配父对象或换行内容是非常糟糕的。下载时,您需要计算图像的高度和宽度。Glide对此进行了回访。然后将高度和宽度设置为imageview(若图像宽度大于设备,则可能需要缩放)。这样,您将拥有一个固定大小的ImageView。您当前的问题是由于recyclerview中视图的可重用性造成的。滚动时,同一视图正用于另一视图。要解决这个问题,您还需要将图像的缩放高度/宽度缓存到相应的模式类中。首先,当您使用Glide时,最好对两个参数使用匹配父级或换行内容。下载时,您需要计算图像的高度和宽度。Glide对此进行了回访。然后将高度和宽度设置为imageview(若图像宽度大于设备,则可能需要缩放)。这样,您将拥有一个固定大小的ImageView。您当前的问题是由于recyclerview中视图的可重用性造成的。滚动时,同一视图正用于另一视图。若要解决此问题,您还需要将图像的缩放高度/宽度缓存到相应的模式类中。可以查看参考。有更好的解释。可以查阅参考。有更好的解释。