2012-02-24 8 views
0

私はいくつかの関連する質問を見つけました。onDraw()の前にキャンバスのサイズを取得するには

私のゲームでは、オブジェクトを作成します。オブジェクト(クラス)は、画面上のランダムな位置: public float X=Rnd.nextInt(400);をとります。 400の最大値をランダマイザーに置き換えたいと思います。

それはこれらの規則に従って、X上のどこかにオブジェクトを置く必要があります:キャンバスのキャンバス+ 10 < X <右マージンの

左マージン - 20

しかし... onDraw()はしていませんまだ呼び出されています。だから私はキャンバス上でgetWidth()を行うことはできません。

どうすれば解決できますか?つまり、onDrawが呼び出される前にキャンバスのサイズをチェックする方法は何ですか? (もしそうなら、どうすればいい?)

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; 

あなたはgetApplicationContext()

でctxを得ることができますし、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を拡張するクラスで使用しました。次に:with 'width = display.getWidth(); '公開可能なintに幅を置くことができます。 –

+0

ByteMe、あなたの答えのおかげで、私はhttps://play.google.com/store/apps/details?id=happyworx.nl.Applezと書くことができました。ありがとうございました! –

+0

ActivityはContextのインスタンスなので、getContext()またはgetApplicationContext()を使用することはお勧めしません。例Context context = this; (これは活動である) – barwnikk

0

Canvas.getWidth()は、あなたの考えを返すものではないため、使用しないでください。このメソッドは、キャンバス全体の幅を返します。これは、通常、ウィンドウの幅に相当します。代わりにView.getWidth()を使用してください。

+0

どうすればよいですか?リンゴのクラスで? maingamepanelクラスで?私は静的な参照エラーを取得します。私のMainGamePanelはSurfaceViewを拡張してSurfaceHolder.Callbackを実装しています...これを行う方法を詳しく教えてください。 thnx –

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クラスとクラス( "apple")クラスがあるので、私はランダマイザを使用したいと思います。 MainGamePanelでは、onDraw()をオーバーライドします。あなたのコードはどこに置くべきですか? ctx.getSystemServiceとは何ですか?型表示のgetSizeは未定義ですか? –

+0

ctxコンテキストを取得し、get size java docについて[このリンク](http://developer.android.com/reference/android/view/Display.html#getSize(android.graphics.Point))を参照してください。 –

関連する問題