【问题标题】:Why are the Width / Height of the drawable in ImageView wrong?为什么 ImageView 中可绘制对象的宽度/高度错误?
【发布时间】:2011-06-30 14:32:49
【问题描述】:

应该是一个简单的。

当我拉image.getDrawable().getIntrinsicWidth() 时,我得到一个大于源图像宽度的值。它的 X 坐标返回 2880 而不是 1920 1.5 倍大?

我想知道具有“中心”的 scaleType 的 ImageView 是否会影响它,但是,根据documentation

"将图像在视图中居中,但不执行缩放。"

这里是来源:

<ImageView  
    android:id="@+id/backgroundImage"   
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:src="@drawable/background"
    android:scaleType="center"/>

【问题讨论】:

  • 你在ImageView中使用wrap_content吗?
  • 是的,我的ImageView 的高度和宽度都有wrap_content

标签: android imageview


【解决方案1】:

你说drawable来自你的/res文件夹。它在哪个文件夹中?

  • /res/drawable

  • /res/drawable-mdpi

  • /res/drawable-hdpi

    等等。

您正在测试的设备的密度是多少?它是一般密度为 240dpi 的 Nexus S 吗?因为如果你的源drawable位于drawable-mdpi文件夹中并且你在240dpi的设备上进行测试,那么Android系统会自动将drawable放大1.5的因子,这样物理尺寸就会与基线一致设备密度为 160dpi。

当您调用getIntrinsicWidth() 时,返回的是Android 缩放drawable 后drawable 希望 的大小。你会注意到2880 = 1920 * 1.5

如果您将 drawable 放置在 /res/drawable 中,Android 系统会将这些 drawable 视为用于 mdpi 设备,因此会在您的 Nexus S 中进行升级。如果这是用于 hdpi 屏幕并且您不希望它升级然后尝试放置它在drawable-hdpi

【讨论】:

    【解决方案2】:

    您是否尝试过将高度和宽度乘以密度:

    getResources().getDisplayMetrics().density
    

    你的drawable是在资源中还是从网上下载?如果是下载的,你必须给它密度:

    DisplayMetrics metrics = new DisplayMetrics();
    getContext().getWindowManager().getDefaultDisplay().getMetrics(metrics);
    Resources r = new Resources(getContext().getAssets(), metrics, null);
    BitmapDrawable bmd = new BitmapDrawable(r, bitmap);
    

    【讨论】:

      【解决方案3】:

      检查它是否返回显示大小的值,这不是它的实际大小。例如,传统 800x480 手机上的 50x320 像素横幅广告显示为 75x480。

      应该能够与密度(或你的眼睛!)进行比较,看看它在做什么。

      【讨论】:

      • 差别不是很大(它给出的是 1660 而不是 1400)。如何检查密度?
      【解决方案4】:

      这可能与您遇到的问题无关,但只是为了好玩,我建议您确定一下:您是否在清单中指定 android:minSdkVersion

      我提到这一点的唯一原因是因为有一段时间我没有在项目中这样做,我了解到这会增加屏幕密度并导致各种奇怪的问题。

      【讨论】:

      • 我的 minSDK 版本设置为 10
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 2015-01-13
      • 1970-01-01
      相关资源
      最近更新 更多