为什么ImageView中drawable的宽度/高度错误?

时间:2011-06-30 14:32:49

标签: android imageview

应该是一个简单的。

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

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

  

“在视图中居中,但不执行缩放。

以下是来源:

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

4 个答案:

答案 0 :(得分:21)

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

  • /res/drawable
  • /res/drawable-mdpi
  • /res/drawable-hdpi

    等。

您正在测试的设备的密度是多少?它是一般的密度为240dpi的Nexus S吗?因为如果您的源可绘制文件位于drawable-mdpi文件夹中并且您正在240dpi设备上进行测试,那么Android系统将自动将可绘制对象缩放1.5,以便物理大小为与160dpi时的基线设备密度一致。

当您致电getIntrinsicWidth()时,返回的内容是Android缩放drawable后可绘制想要的大小。你会注意到2880 = 1920 * 1.5

如果您将drawable放在/res/drawable中,那么Android系统会将这些drawable视为mdpi设备,因此Nexus S中的升级版本如果这是针对hdpi屏幕的,那么你不希望它升级到那么尝试将其放入drawable-hdpi

答案 1 :(得分:4)

您是否尝试过按密度倍增高度和宽度:

getResources().getDisplayMetrics().density

您可以在网上获取资源还是从网上下载?如果下载了,你必须给它密度:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这可能与您所遇到的问题毫无关系,但仅仅是为了踢,我建议无论如何都要确定:您是否在清单中指定了android:minSdkVersion? / p>

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