根据屏幕密度获取可绘制的实际尺寸

时间:2013-12-05 11:31:27

标签: android bitmap android-resources screen-size

我有mdpi,hdpi和xhdpi的可绘制资源(png图像)。此图像用作背景,并根据其宽度调整另一个位图的大小并将其绘制过来。

mdpi,hdpi和xhdpi的一切正常,因为每个密度的可绘制文件夹都有图像。问题出现在不同的密度上,例如在具有1080p屏幕的Galaxy S4上运行

我是这样做的:

//Get the bitmap width

BitmapFactory.Options dimensions = new BitmapFactory.Options();
dimensions.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.ic_marker_void, dimensions);
        int width = dimensions.outWidth;

我在测试中发现的是在720p屏幕上运行时宽度是80像素但是在1080p设备上运行时宽度也是80像素。这与xhdpi文件夹中的png大小相同。

但实际上,当我在1080p屏幕上显示图像时,图像会被缩放并正确显示。所以它确实采用了xhdpi图像,但它在显示之前进行了缩放。作为旁注,图像用作地图标记背景。

我的问题是:如何获得图像的宽度,确切地说它是如何在屏幕上呈现的,而不是xhdpi文件夹中的大小?

2 个答案:

答案 0 :(得分:2)

也许这就是你要找的东西:
这假设,如你所说,你的代码适用于mdpi,hdpi和xhdpi,并在大于xhdpi时返回xhdpi宽度。

float width;
BitmapFactory.Options dimensions = new BitmapFactory.Options();
dimensions.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.ic_marker_void, dimensions);

float densityFactor = this.getResources().getDisplayMetrics().density;
if(densityFactor > 2)  // 2 -> xhdpi
    width = dimensions.outWidth / 2 * densityFactor;
else
    width = dimensions.outWidth;

答案 1 :(得分:0)

您可以为更高端的设备创建 drawable-xxhdpi

drawable-xxhdpi
drawable-xxxhdpi 

res目录中的这两个文件夹有助于支持非常高的hdpi设备...