我有一个尺寸为
537 * 233
的位图。这显示在我的片段中。
我也在通过代码计算这个位图的高度。
我开始知道只需使用,
image.getHeight()
将始终返回 0。
然后我发现将相同的内容放入重写方法中
onGlobalLayout()
将给出实际高度。
我就是这么做的。请参阅我的SO 帖子获取链接。
现在我得到的高度是155。
我也尝试用
获取高度BitmapDrawable bd = (BitmapDrawable) getResources().getDrawable(R.drawable.chart);
imgHeight = bd.getBitmap().getHeight();
我得到的高度又是155。
根据以上尺寸,高度应为
233
。
我在模拟器中也看到了相同的高度。
为什么会有差异和/或我认为是其实际高度?
更新:
好的,我的图表位于
drawable-hdpi
,我的设备的密度为 160
。因此,当我将图表图像放入 drawable
文件夹中时,我得到了正确的高度。但是,如果图表高度是固定的(233),为什么在某些设备中我的图表高度足够大以重叠我的底部时间线。尽管我知道一点,这可能是因为近似值而不是准确值(密度、分辨率)导致了差异。但是,有什么想法可以解决这个问题吗?
首先你知道 mdpi = 1、hdpi = 1.5 和 xhdpi = 2。
假设您的 mdpi 文件夹中有一张宽度 = 100px 的图像。
在 mdpi 设备上,图像宽度将为 100x1 = 100px,
在 hdpi 设备上 100x1.5 = 150px,
在 xhdpi 设备上 100x2 = 200px。
如果 hdpi 或 xhdpi 文件夹中没有图像,Android 系统将缩放它们。
因此,当您在
hdpi
文件夹中有图像并且在中密度设备 (mdpi
) 上运行应用程序时,Android 会将图像缩小 1.5。 233 / 1.5 = 155
。hdpi
设备,也会发生同样的情况,您将获得宽度约为 310 的图像。
所以,为了避免缩放,我建议将图像放在
drawable-nodpi
文件夹中(此文件夹中的图像不会被Android系统缩放)。
PS:如果将图像放入
drawable
文件夹并在 mdpi 设备中运行,则图像将不会缩放,因为 drawable
文件夹 = drawable-mdpi
最后一个答案很有帮助。
First you know mdpi = 1, hdpi = 1.5 and xhdpi = 2.
Lets say you have an image in mdpi folder with width = 100px.
On mdpi device the image width will be 100x1 = 100px,
On hdpi device 100x1.5 = 150px,
On xhdpi device 100x2 = 200px.