【问题标题】:Dynamic image height in recycler view回收站视图中的动态图像高度
【发布时间】: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


【解决方案1】:

在使用滑动加载图像之前使用

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

【讨论】:

  • 可以参考this
  • This 有更好的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 2022-12-19
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多