1

我正在开发基于 SurfaceView 类的安卓游戏。目前,我一直在尝试针对不同的屏幕尺寸优化视图。

问题 1:我的 res 文件夹中有 PNG 文件,我使用 Canvas.drawBitmap 绘制它们。阅读本文(http://developer.android.com/guide/practices/screens_support.html)后,我认为如果屏幕更大,android 会调整位图的大小。不幸的是,在平板电脑上启动我的应用程序与在手机上启动它时,我发现没有缩放(或任何变化)。那么它是如何完成的呢?我应该想出一些奇特的策略来计算可用空间并使用源矩形和目标矩形绘制我的位图吗?如果有人有最佳实践或一些提示如何在画布上绘制位图,那就太好了。我已经阅读了像素<->dip 转换主题,但我不得不说我不知道​​如何在我的应用程序中使用该“解决方案”。所以任何帮助表示赞赏......

问题 2:我的 res 文件夹中有 3 个 PNG。一个 ldpi、一个 mdpi 和一个 hdpi。Ldpi 图像有 50px*50px,mdpi 有 75px*75px,hdpi 有 100px*100px。当我在模拟器(800*480)中加载应用程序时,它使用 100*100 png。当我在 Acer Iconia Tab 上加载应用程序时,它使用 75*75 图像。我认为 hdpi 用于大屏幕(=tab),而 mdpi 或 ldpi 将用于模拟器屏幕。至少我认为android也会在标签上使用hdpi-image,但我很惊讶......对此的任何解释都非常感谢

抱歉 4 长文本,只是想清楚...

赛亚·埃夫迪

4

2 回答 2

1

最佳做法是将图像放入 mdpi 文件夹(像素方面 1),然后使用所有水平尺寸的密度。例如:

src.left = offsetX * density; 
src.top = 0; 
src.right = (offsetX + width - 1) * density; 
src.bottom = height - 1;
dst.left = x * density; 
dst.top = y; 
dst.right = (x + width - 1) * density; 
dst.bottom = height - 1;
canvas.drawBitmap(myImageStrip, src, dst, null);

对于 mdpi 密度为 1.0,ldpi 密度 = 0.75 和 hdpi 密度 = 1.5,您可以使用以下方法获得这些值和其他值

density = getResources().getDisplayMetrics().density;

还有另一种解决方案:您可以将相同的图像放在所有文件夹中。系统将采用适当的一个,因此您不需要将值与密度相乘。但在这种情况下,您将需要 3 个或更多相同图像的副本。

于 2013-04-04T21:41:48.567 回答
1

为了计算你的绘图应该有多大,你可以使用Canvas.getDensity().

屏幕的 DPI 值取决于像素数量和屏幕大小。平板电脑确实具有高分辨率,但大多数也相当大。这导致较低的 DPI 值。有关更多信息,请查看http://developer.android.com/guide/practices/screens_support.html

于 2011-11-02T16:08:20.710 回答