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

应该是一个简单的。

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

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

“将图像置于视图中心, 但不执行缩放。

这是来源:

  

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

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

    等等..

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

当你调用getIntrinsicWidth() ,返回的是在Android缩放drawable之后drawable 想要的大小。 你会注意到2880 = 1920 * 1.5

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

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

 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); 

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

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

对于你所遇到的问题,这可能没有任何关系,但只是为了踢,我会建议它确定无论如何:你在清单中指定android:minSdkVersion吗?

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