2011-11-02 69 views
1

我正在开发基于SurfaceView类的android游戏。目前,我试图优化不同屏幕尺寸的视图。画布位图绘制和屏幕密度

问题1:我有PNG档案在我的res文件夹,我使用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将用于模拟器屏幕。至少我认为机器人会用华电国际形象也是选项卡上,但我得到惊讶...任何移出这个也大加赞赏

对不起4长的文字,只是想清楚...

CYA EffDee

回答

1

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

一个屏幕的DPI值取决于像素的量和在屏幕的大小。片剂确实有很高的分辨率,但大多数都很大。这导致较低的DPI值。有关详细信息看看http://developer.android.com/guide/practices/screens_support.html

+0

感谢您的评论。我试着用密度工作,但没有运气...我仍然有点困惑...我有一个宽度(= W)和高度(= H)的位图,而不是像我的原型-Verson中绘制位图给点10,10与 'drawBitmap(MYBITMAP,10,10,NULL)' 你建议我这样做 'drawBitmap(MYBITMAP,wholeBitmapRect,新的矩形(10,10,W * densityFactor,H * densityFactor) ,null)' 这让我疯狂! thx用于清除与dpi的价值...现在它是有道理的;) – Effdee

+0

本文可能对您有用:http://stackoverflow.com/questions/5014882/drawing-a-bitmap-on-一个帆布-了缩放/ 5017017#5017017 – Thomas

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张或更多的相同图像的副本。