将 ImageView ScaleType 设置为“center”并没有像我预期的那样工作

2024-01-03

我的布局如下ImageView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:descendantFocusability="blocksDescendants">
    <ImageView
        android:id="@+id/imageview_icon"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:scaleType="fitCenter" />
    (...)
</LinearLayout>

Those 48dp等于 36px、48px 和 72pxldpi, mdpi and hdpi分别。在此将使用的所有图像ImageView基本上都是图标,我在网上找到了我想要的应用程序(免费许可证)。但不幸的是,它不提供大于 48px 的图像,并且使用不同的图像也是不可能的。所以我需要一个新的解决方案......

现在我有 36px 和 48px 图像ldpi and mdpi文件夹,分别。但我遇到了麻烦hdpi。我想要运行的设备hdpi是让他们使用mdpi图像(可用的较大图像)并按原样使用,无需缩放。基本上,ImageView for hdpi是 72px,所以我希望 48px 图像位于 72px 内部的中心,而不进行缩放。为此,我只是尝试改变scaleType in the ImageView上面只是center,但图像无论如何都会缩放。

我的最终问题是,解决上述问题的正确方法是什么?我怎样才能拥有ldpi and mdpi图像以其各自的密度使用,但设备正在运行hdpi选取可用的最大图像(即mdpi的)并防止任何缩放,只需将图像安装在中心ImageView?

EDIT:
我自己回答了这个问题,但这可能是其他来这里的人正在寻找的答案。但我确实提供了一些关于实际发生的情况和根本问题的见解。如果可以的话,请查看并提供解决方法/修复程序。我赌你 :)


事实证明这个问题是一个非问题,我向发现它的任何人道歉,希望接受的答案将是他们正在寻找的答案,而事实并非如此。

为了明确起见,scaleType=centerInside正在按预期工作。也就是说,如果您的图像小于ImageView本身,该图像不会缩放到ImageView,它将保留在中心并且不缩放。

但为了使上述工作按预期工作,drawable 必须放置在nodpi文件夹。我知道这并不总是可以接受的。因此,当该可绘制对象必须放入其中一个密度文件夹而不是nodpi文件夹,将scaleType属性仅在特定情况下起作用。

什么时候起作用:

  • 您正在设备/模拟器上运行该应用程序Xdpi密度和 有一个可绘制的Xdpi密度文件夹(此处X means, l, m, h甚至xh).
  • 您正在运行应用程序设备/模拟器, 例如,与hdpi密度,但没有可绘制的hdpi文件夹,系统会从nodpi文件夹(并不总是知道它将选择哪个文件夹 从)。

当它不起作用时:

  • 例如,您正在运行应用程序设备/模拟器hdpi密度,但没有可绘制的hdpi文件夹和 系统从任何其他密度中选择替代可绘制对象 文件夹(不是nodpi文件夹),可绘制对象将缩放到ImageView界限和scaleType属性不会做 任何事物。

总之,我的问题没有“正确”的答案,这实际上取决于您想要实现的目标。答案my不过问题是,我只需要做两件事:a)设置ImageView scaleType to centerInsideb) 复制所有可绘制对象mdpi文件夹放入hdpi文件夹(如上所述,scaleType=centerInside将使之发挥作用)。

当然,复制可绘制对象并不是最佳选择,但我找不到任何其他解决方案,到目前为止,也没有其他人可以......所以,目前,我会将其标记为已接受。

那么最佳答案/解决方案是什么?
在我看来,如果设备/模拟器正在运行hdpi并且没有匹配的可绘制对象hdpi文件夹应该从mdpi文件夹而不缩放它,允许scaleType做这件事的属性。或者可能强制系统转到nodpi文件夹,如果在相应的密度文件夹中找不到匹配的可绘制对象,这也可能是一个解决方案。

因此,如果有人能够提供解决此问题的方法/修复方案,那将是真正正确的答案。如果到了那个时候,我会改变接受的状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 ImageView ScaleType 设置为“center”并没有像我预期的那样工作 的相关文章

随机推荐