2012-02-24 64 views
0

我發現了一些相關的問題,沒有排他性的答案;如何獲取onDraw之前的畫布大小()

在我的遊戲中,我創建了一個對象。對象(類)在屏幕上隨機放置: public float X=Rnd.nextInt(400);。我想用隨機函數替換400最大值。

應該把對象某處X,遵循以下規則:

帆布+ 10 < X <畫布的右邊緣的左邊空白處 - 20

但是...的的onDraw()有沒有但被稱爲。所以我不能在畫布上做一個getWidth()。

我應該如何解決這個問題?即在調用onDraw之前檢查畫布大小的方法是什麼? (或者我應該使用screenize?如果是這樣,怎麼辦?)

Thnx!

回答

1
WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

你可以得到CTX與getApplicationContext()

,如果你使用的是API < 13,你應該使用:

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 
+0

謝謝! 'Display display =((WindowManager)getContext()。getSystemService(Context.WINDOW_SERVICE))。getDefaultDisplay();' 解決了它。我在擴展SurfaceView的類中使用它。然後用:'width = display.getWidth();'我可以把寬度放在一個可公開訪問的int中。 – 2012-02-25 10:14:07

+0

ByteMe,感謝您的回答,我可以寫出https://play.google.com/store/apps/details?id=happyworx.nl.Applez。謝謝! – 2012-05-07 22:33:38

+0

我不推薦使用getContext()或getApplicationContext(),因爲Activity是Context的實例,例如:Context context = this; (這是活動) – barwnikk 2013-12-17 14:38:06

0

你不應該使用Canvas.getWidth(),因爲它不會返回你認爲它的作用。此方法返回整個Canvas的寬度,通常對應於窗口寬度。只需使用View.getWidth()。

+0

我該怎麼做?在蘋果課上?在maingamepanel類中?我收到一個靜態引用錯誤。我的MainGamePanel擴展了SurfaceView實現SurfaceHolder.Callback ...請詳細說明如何做到這一點。 thnx – 2012-02-24 19:52:19

0

使用下面的代碼用於獲取屏幕尺寸:

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 
+0

Sry,Praful,我不明白。我有類MainGamePanel和類(「蘋果」),我想使用隨機數發生器。在MainGamePanel中,我重寫了onDraw()。我應該在哪裏放置你的代碼?什麼是ctx.getSystemService? getSize對於類型顯示沒有定義? – 2012-02-24 19:47:57

+0

ctx的上下文,並看到[此鏈接](http://developer.android.com/reference/android/view/Display.html#getSize(android.graphics.Point))獲取大小的Java文檔.. – 2012-02-24 19:54:31

相關問題