Recycler视图中的ImageView - 滚动导致所有图像具有相同的宽度

时间:2016-01-04 19:30:53

标签: android imageview android-recyclerview android-viewholder

我有一个带有图像的Recycler View,其中图像的宽度是可变的,但高度是固定的。但是,滚动会导致所有图像具有相同的宽度。我的猜测是视图持有者宽度没有正确更新,它只是使用前一个[我正在使用异步图像加载器]。但是,清除图像drawable,将其设置为GONE然后再次VISIBLE也不起作用。但是,如果我关闭屏幕并将其重新打开,则会重新正确绘制。

我的视图持有者项目中有以下内容。请注意,高度是固定的,但宽度是wrap_content。如果高度不固定并且是wrap_content,则此问题不会重现。

这是我的item_view.xml的样子:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

   <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="150dp"
        android:scaleType="centerInside"/>

</RelativeLayout>

2 个答案:

答案 0 :(得分:1)

来自ScaleType documentation它说,

  

CENTER_INSIDE:均匀缩放图像(保持图像的外观   比率),以便图像的尺寸(宽度和高度)都是   等于或小于视图的相应尺寸(减去   填充)。

RecycleView使用相同的xml来填充所有项目,因为当您使用固定layout_heightscale_type center_inside时,它会在原始图片中找到不同的维度,它会在缩放后自动将谁的图像放入项目中。

如果要为不同的图像维度使用不同的内容大小,则必须使用custom项目视图。

答案 1 :(得分:1)

CENTER_INSIDE:均匀缩放图像(保持图像的纵横比),使您的imageview始终具有height = 150dp,但根据图像宽高比,每个图像的宽度将不同,因此宽度将为= 150×(original_image_width×original_image_height) dp。尝试使用imageview scaltype fitXY,它保持高度150dp,宽度等于原始图像高度。