2014-01-13 153 views
0

我做了一個測試遊戲,使用本教程http://www.kilobolt.com/day-6-the-android-game-framework-part-ii.html,現在我想做一個真正的遊戲發佈在遊戲商店。Android - 支持多屏幕畫布問題

我希望我的遊戲支持不同的屏幕尺寸。所以在閱讀很多內容之後,我現在知道我必須爲不同的屏幕尺寸指定不同的佈局。但我不知道該怎麼做關於教程的一些代碼。

它基本上有這樣的事情:

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

,然後將其用於創建畫布:

this.canvas = new Canvas(frameBuffer); 
  • 如何適應是進入佈局?
  • 這些尺寸是以像素爲單位嗎?
  • 我應該將它們傳遞給dp值嗎?
  • 我應該在xml佈局中指定寬度和高度值嗎?

我認爲正確的答案是將它們傳遞給代碼上的dp,但即便如此,我也不知道該怎麼做。

我在教程網站上問了同樣的問題,但還沒有得到任何答覆,請幫助。

回答

0

UPDATE

我會使用DP如果你在XML中指定的尺寸建議,以及PX如果你動態地做這件事,但是這是不好的建議。我知道你很討厭聽到這個,但這完全取決於你想要做什麼。

如果您正在編寫一個狀態欄,無論屏幕大小如何,您總是希望它的大小相同 - 爲此,請使用px。我看不出你如何用dp做到這一點。

另一方面,假設你有一張圖像,你希望只是屏幕的一半 - 你有幾個選擇。如果你是用代碼來做的話,你可以使用任何一種 - 速度方面它是微不足道的。如果你用xml來完成它,你可以直接將它設置爲80dp,或者(這是我所做的),只需使用帶有權重的線性佈局。

說實話,我從不使用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 
+0

好了,getWindowManager()getDefaultDisplay()的getSize(大小)沾到PX或DP設備屏幕尺寸。? – Adocad

+0

getWindowManager()。getDefaultDisplay()。getSize(size)返回像素(px) – dberm22

+0

感謝您的回答,這些方法實際上是有幫助的。但我的主要問題仍然存在。我該怎麼辦?你認爲將這些值傳遞給dp會更好嗎? – Adocad