1

私のアプリケーションはビットマップを多用し、正確なピクセル レイアウトを使用しています (これは実際には一種のゲームであり、このピクセル ベースの座標を回避するのはかなり困難です)。

私がやりたかったのは、画面サイズを取得して計算を行うために、いくつかのレイアウト計算とビットマップの事前スケーリングを実行することですonCrete-私はよく知られているAPIを使用しています.getWindowManager().getDefaultDisplay().getSize()

しかし、予期しない問題に遭遇しました。私のアクティビティは横向きのみに構成されていますが、エミュレーターでアプリケーションを起動onCreate()し、エミュレーターがロックされている間に呼び出された場合、によって返される画面サイズgetSize()は縦向きを示します。画面のロックを解除するonCreate()と、再度呼び出されますが、今回は予想される横長モードの寸法に正しく一致しています。

この状況をどのように処理すればよいかわかりません。次のオプションが表示されます。

  • 呼び出しごとにonCreate()、完全なレイアウト計算とリソースのスケーリングを再度実行します。これは論理的に正しい解決策ですが、最初の結果を破棄するために、同じ作業を 2 回行いたくありません。
  • がポートレート モードで呼び出された場合onCreate()は、何もせず、背景を黒に設定します (画面のロックを解除すると、ばかげた回転アニメーションが表示されるので、これはほとんどフェードイン アニメーションになります)。

実際には 2 番目のオプションを希望しますが、副作用が少し心配です。誰でもこの問題に直面しましたか?

更新 (2012-07-08) : 問題は寸法自体の取得やレイアウトの計算ではないため、この質問に少し誤解を招くようなタイトルを付けた可能性があります (申し訳ありません!)。それは、アクティビティが最初に縦向きモードで作成され、横向きのみとして宣言されているにもかかわらず、横向きモードで再び作成されるということです。私は当初、アクティビティが横向きでのみ作成されることを期待していました (当然のことですよね?)。

ポートレートモードで作成されたときに、アクティビティを黒色で塗りつぶすことに最終的に決めました。副作用は観察されませんでした。Android 4.0 では、画面のロックを解除すると実際の回転アニメーションが表示されます。これは少し奇妙ですが、電話を回転させる必要があることをユーザーに知らせるためのものだと思います。縦向きモードでは画面を黒で塗りつぶすだけなので、このアニメーションはフェードインと回転を組み合わせたようなもので、まったく問題ありません。

4

2 に答える 2

0

エミュレーターがロックされている場合、ユーザーはとにかく何も実行できないと想定できないので、アプリはこの最終的なケースを処理する必要はありませんか?

とにかく、bmavus書いgetMetricsたように、画面サイズを取得するために使用します。また、アプリの画面の向きを変更する必要がある場合は、マニフェストまたはコードで変更できます。

ゲームの場合は、opengl ソリューションを使用することをお勧めします。掘り下げる時間があまりない場合は、 や などのサードパーティ エンジンを使用できandengineますlibgdx

于 2012-07-07T09:26:08.117 に答える
0

それを使って

DisplayMetrics dm=new DisplayMetrics(); 

this.getWindowManager().getDefaultDisplay().getMetrics(dm);

これを使用すると(コードを下に見る)、画面サイズのみが得られ、ビューが静的サイズの場合、異なる画面ごとに異なるサイズで表示されます。

Display screen=getWindowManager().getDefaultDisplay().getSize();

使用方法: 画面ごとに密度が異なります。だから使用:

float density=dm.density;

この密度では、ビューのサイズを次のように設定できます。

(YOUR_ITEM_SIZE)*density;

追加情報については、こちらもご覧ください。

http://developer.android.com/reference/android/util/DisplayMetrics.html

于 2012-07-07T06:50:43.017 に答える