私のアプリケーションはビットマップを多用し、正確なピクセル レイアウトを使用しています (これは実際には一種のゲームであり、このピクセル ベースの座標を回避するのはかなり困難です)。
私がやりたかったのは、画面サイズを取得して計算を行うために、いくつかのレイアウト計算とビットマップの事前スケーリングを実行することですonCrete
-私はよく知られているAPIを使用しています.getWindowManager().getDefaultDisplay().getSize()
しかし、予期しない問題に遭遇しました。私のアクティビティは横向きのみに構成されていますが、エミュレーターでアプリケーションを起動onCreate()
し、エミュレーターがロックされている間に呼び出された場合、によって返される画面サイズgetSize()
は縦向きを示します。画面のロックを解除するonCreate()
と、再度呼び出されますが、今回は予想される横長モードの寸法に正しく一致しています。
この状況をどのように処理すればよいかわかりません。次のオプションが表示されます。
- 呼び出しごとに
onCreate()
、完全なレイアウト計算とリソースのスケーリングを再度実行します。これは論理的に正しい解決策ですが、最初の結果を破棄するために、同じ作業を 2 回行いたくありません。 - がポートレート モードで呼び出された場合
onCreate()
は、何もせず、背景を黒に設定します (画面のロックを解除すると、ばかげた回転アニメーションが表示されるので、これはほとんどフェードイン アニメーションになります)。
実際には 2 番目のオプションを希望しますが、副作用が少し心配です。誰でもこの問題に直面しましたか?
更新 (2012-07-08) : 問題は寸法自体の取得やレイアウトの計算ではないため、この質問に少し誤解を招くようなタイトルを付けた可能性があります (申し訳ありません!)。それは、アクティビティが最初に縦向きモードで作成され、横向きのみとして宣言されているにもかかわらず、横向きモードで再び作成されるということです。私は当初、アクティビティが横向きでのみ作成されることを期待していました (当然のことですよね?)。
ポートレートモードで作成されたときに、アクティビティを黒色で塗りつぶすことに最終的に決めました。副作用は観察されませんでした。Android 4.0 では、画面のロックを解除すると実際の回転アニメーションが表示されます。これは少し奇妙ですが、電話を回転させる必要があることをユーザーに知らせるためのものだと思います。縦向きモードでは画面を黒で塗りつぶすだけなので、このアニメーションはフェードインと回転を組み合わせたようなもので、まったく問題ありません。