Android - 支持多屏幕画布问题

时间:2014-01-13 21:47:36

标签: android xml layout canvas screen

我使用这个教程http://www.kilobolt.com/day-6-the-android-game-framework-part-ii.html做了一个测试游戏,现在我想在游戏商店做一个真正的游戏发布。

我希望我的游戏支持不同的屏幕尺寸。因此,在阅读了很多内容之后,我现在知道我必须为不同的屏幕尺寸指定不同的布局。但是我不知道如何处理教程中的一些代码。

它基本上有这样的东西:

int frameBufferWidth = 800;
int frameBufferHeight = 480;
Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth, frameBufferHeight, Config.RGB_565);

然后用于创建Canvas:

this.canvas = new Canvas(frameBuffer);
  • 如何使其适应布局?
  • 这些尺寸是以像素为单位的吗?
  • 我应该将它们传递给dp值吗?
  • 我应该在xml布局上指定那些宽度和高度值吗?

我认为正确的答案是将它们传递给代码上的dp,但即便如此,我也不知道该怎么做。

我在教程网站上问了同样的问题,但还没有得到任何答复,请帮忙。

1 个答案:

答案 0 :(得分:0)

<强>更新

如果您在xml中指定大小,我建议使用dp,如果您是动态地使用px,则建议使用px,但这是不好的建议。我知道你讨厌听到这个,但这完全取决于你想要做什么。

如果您正在编写状态栏,则无论屏幕大小如何,您始终都希望它具有相同的大小 - 为此,请使用px。我不知道如何使用dp。

另一方面,假设你有一个想要成为屏幕一半的图像 - 你有几个选择。如果你在代码中这样做,你可以使用 - 速度方面它是无关紧要的。如果你是用xml做的,你可以直接将它设置为80dp,或者(这就是我的工作),只需使用带权重的linearlayout。

老实说,我从不使用dp,但在某些情况下我完全看到了它的便利性。我使用像素和加权布局来做所有事情,我能够做到这一切。把它当作它的价值,但我觉得它更精确,可以获得更好的分辨率,更好地扩展到不同的屏幕尺寸,更直观。但如果你更喜欢使用dp,那就去做吧。无论你觉得什么都比较舒服,这真的很棒。这两种方式都是完全可以接受的,无论谁告诉你一个方法都比另一方更好,只是停止聆听。


在您的活动中,请尝试使用:

Point size = new Point();
getWindowManager().getDefaultDisplay().getSize(size);
int frameBufferWidth = size.x;
int frameBufferHeight = size.y;

然而,这仅适用于api> 13。对于早期版本,请使用:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int frameBufferHeight = metrics.heightPixels;
int frameBufferWidth = metrics.widthPixels;

注意:这些函数的大小以像素为单位。要在px和dp之间进行转换,您可以这样做:

float factor = getResources().getDisplayMetrics().density;
int realwidth = (int) Math.round(width/factor); <--to convert px to dp
//int realwidth = (int) Math.round(width*factor); <--to convert dp to px