我有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文件夹中的大小?
答案 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设备...