首先这是一张图来说明我的问题: 图文
在左图中,您可以看到它的外观。这也是 AndroidStudio 在预览中的展示方式。但如果我在模拟器上运行它,它会裁剪图像,只留下深绿色部分。 (右图)
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/img_header"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:focusableInTouchMode="false"
android:src="@drawable/header"
android:adjustViewBounds="true"
android:scaleType="centerCrop" />
家长视图:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".menu">
我尝试了不同的scaleTypes,但没有任何东西能给我想要的结果。 这不是我第一次为 ImageViews 烦恼,但我第一次无法自己解决这个问题......
如果我删除“adjustViewBounds”,预览将显示与设备/模拟器相同的结果。如果这对某人来说是一个暗示。
编辑:我创建了标题的第二个版本,其大小是原来的两倍。现在它可以与“fitXy”和“adjustViewBound(true)”一起使用。但为什么?原始图像的高度为 512px,这应该足以让 adjustmentViewBounds 保持宽高比。
听起来你想要 CENTER_INSIDE:
android:scaleType="centerInside"
公共静态最终ImageView.ScaleType CENTER_INSIDE
在 API level 1 中添加统一缩放图像(保持图像的 宽高比),以便图像的两个尺寸(宽度和高度) 将等于或小于视图的相应尺寸 (减去填充)。然后图像在视图中居中。从 XML 中,使用 这个语法:android:scaleType="centerInside"。
还有
问题可能是 adjustmentViewBounds 不会将 ImageView 的大小增加到超出可绘制对象的自然尺寸。
您的问题可能是因为当您尝试设置图像时 ImageView 尚未完全初始化或调整大小。在 ViewHolder 中加载和渲染图像所需的时间可能会有所不同,特别是当图像很大或图像很多时。
尝试使用Glide加载图片,它擅长异步加载和图片缓存
Glide.with(itemBinding.root)
.load(imgUrl)
.error(ColorDrawable(PLACEHOLDER_COLOR))
.placeholder(ColorDrawable(PLACEHOLDER_COLOR))
.into(itemBinding.image)
代替 ImageView.load() 方法