Android ImageView 被裁剪

问题描述 投票:0回答:2

首先这是一张图来说明我的问题: 图文

在左图中,您可以看到它的外观。这也是 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 保持宽高比。

android imageview scale
2个回答
1
投票

听起来你想要 CENTER_INSIDE:

android:scaleType="centerInside"

公共静态最终ImageView.ScaleType CENTER_INSIDE

在 API level 1 中添加统一缩放图像(保持图像的 宽高比),以便图像的两个尺寸(宽度和高度) 将等于或小于视图的相应尺寸 (减去填充)。然后图像在视图中居中。从 XML 中,使用 这个语法:android:scaleType="centerInside"。

还有

问题可能是 adjustmentViewBounds 不会将 ImageView 的大小增加到超出可绘制对象的自然尺寸。


0
投票

您的问题可能是因为当您尝试设置图像时 ImageView 尚未完全初始化或调整大小。在 ViewHolder 中加载和渲染图像所需的时间可能会有所不同,特别是当图像很大或图像很多时。

尝试使用Glide加载图片,它擅长异步加载和图片缓存

        Glide.with(itemBinding.root)
            .load(imgUrl)
            .error(ColorDrawable(PLACEHOLDER_COLOR))
            .placeholder(ColorDrawable(PLACEHOLDER_COLOR))
            .into(itemBinding.image)

代替 ImageView.load() 方法

© www.soinside.com 2019 - 2024. All rights reserved.