3

我已阅读“屏幕支持 API 指南”(http://developer.android.com/guide/practices/screens_support.html)和更多资源,但我无法理解 dpi 的工作原理。

我正在开发一款游戏,但我没有使用任何布局(我将使用 canvas.drawbitmap 之类的函数自己绘制)。但是当我使用 Canvas.Drawbitmap 函数时,我需要指定要绘制图像的屏幕像素。

所以我现在使用固定分辨率(1280x800),我正在使用 drawable-nodpi 文件夹,如果手机屏幕更宽或更窄,我稍后会调整画布。问题在于,当分辨率不是原生分辨率(1280x800)时,图像看起来很糟糕。

我能做些什么来解决这个问题?3天的时间阅读和阅读,但所有的解释和示例都与布局、九个补丁等有关。

4

1 回答 1

7

获取正在使用的设备的密度,并将该密度乘以您选择的某个基本尺寸(您实际上希望绘制多大或多小?)

例子:

float objectToDrawHeight = 50; //Specified in plain pixels
float objectToDrawWidth = 50; //Specified in plain pixels

float density = getResources().getDisplayMetrics().density;
objectToDrawHeight *= density;
objectToDrawWidth *= density;

//Draw your object using the new (scaled) height and width
//If you are worried about how the object will look on different aspect ratio devices
//  you can get the screen dimensions and use that ratio as a multiplier
//  just as you did with density

Display display = ((Activity)context).getWindowManager().getDefaultDisplay();
float screenDimensionX = display.getWidth();
float screenDimensionY = display.getHeight();

使用密度和可能的屏幕尺寸应该允许您绘制任何内容并保持正确缩放。使用画布时,假设一切都以像素为单位,并且您必须进行 dpi 转换。

于 2012-08-21T23:55:24.633 回答