2011-11-02 70 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張或更多的相同圖像的副本。