在RecyclerView中,有时候我们需要实现图片的宽度固定,而高度根据图片的宽高比自适应。以下介绍两种实现方式:通过设置adjustViewBounds属性和使用Glide的override方法。
方式一:设置adjustViewBounds属性
adjustViewBounds介绍
android:adjustViewBounds="true"是一个可以应用于ImageView的属性。
当设置为true时,它会根据图片的宽高比自动调整ImageView的边界,以确保图片完整显示,不会出现拉伸或压缩的情况。
但需要注意,这种方式只在ImageView的高度设置为wrap_content时有效。
使用adjustViewBounds
通过在XML布局中设置ImageView的android:adjustViewBounds="true"属性,可以使ImageView根据图片的宽高比自动调整高度。具体步骤如下:
1. 在XML布局中设置ImageView
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivThumb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY"
tools:layout_height="180dp"
tools:src="@color/color_15C5CD"/>
2. 在Adapter中使用Glide加载图片
GlideApp.with(context)
.load(imageUrl)
.placeholder(R.drawable.xxx)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(ivThumb)
这种方式简单直接,只需在XML中设置adjustViewBounds属性即可。
方式二:设置Glide的override
通过Glide的override()方法可以指定固定的宽度,并将高度设置为Target.SIZE_ORIGINAL,这样Glide会根据原始图片的宽高比自动计算高度。具体步骤如下:
在Adapter中使用Glide加载图片
GlideApp.with(context)
.load(item.localPath)
.override(fixedWidth, Target.SIZE_ORIGINAL)
.fitCenter()
.error(R.drawable.xxx)
.placeholder(R.drawable.xxx)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(ivThumb)
这种方式灵活性更高,通过override方法可以精确控制ImageView的宽度,而高度由Glide自动计算。此外,fitCenter()方法可以确保图片按比例缩放并居中显示。