时间:2011-11-02 15:43:22

标签: android canvas bitmap hdpi

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

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

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

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

CYA EffDee

2 个答案:

答案 0 :(得分:1)

要计算绘图的大小,可以使用Canvas.getDensity()

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

答案 1 :(得分: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份或更多份相同的图片。