画面の回転を検出するにはどうすればよいですか
-
27-10-2019 - |
質問
コンパスを表示しているアクティビティがあります。針を適切に回転させるには、画面の向きを知る必要があります。これを適切に処理するには、90°と270°の回転を区別する必要があります。
画面を回転させると(少なくともNexus Sでは)、アクティビティのジェネラコディセタグコードが呼び出されます。ポートレートモードからランドスケープモードに回転するとき。上端を上げた状態で1つの横向きモードから別の横向きモードに回転すると、onCreate
が2回呼び出されます(縦向き用に1回、ターゲット横向きモード用に1回)。
ただし、下端を上にして回転すると、画面が180度回転し、onCreate()
が呼び出されません。この場合に発生するイベントはありますか?
解決
構成が実際に変更されていないため、180度回転しても、再起動されたり、構成が変更されたりすることはありません。 (それはまだ横向きまたは縦向きであり、他のすべては同じです。)
ただし、コンパスを表示している場合は、センサーイベントからコンパスを更新している必要があります。したがって、センサーの更新を取得するたびにDisplay.getRotation()を呼び出すだけで、画面の現在の回転を取得できます。実際、必要なのは、方向だけでなく、センサーイベントの解釈(または実際には、画面に到達したときにそれらの描画がどのように変更されるか)のローテーションです。
関連するブログ投稿が
SDKのドキュメントを必ずお読みください。>
他のヒント
ヘルパークラス
SensorManagerのドキュメントをご覧ください。加速度計を使用して最も正確な情報を取得する方法の最良の例と説明を入手してください。スマートフォンの向きを検出するだけで物を作る代わりに、そのAPIを使用すると、アスファルトやニードフォースピードなどのレースゲームで使用されているのと同じように、正確な回転を取得できます。
Monchoteが言ったように、コンパスで針を期待どおりに回転させるには、 UIを縦向きまたは横向きにロックすることをお勧めします。デバイスの回転角度に応じて針の角度を変更します。これは、オリエンテーションリスナーから簡単に取得できます。
このように、ユーザーが自動回転機能を開いているかどうかに関係なく、回転角の変更通知をいつでも受け取ることができます。
OnConfigurationChanged メソッドを見てください。向きの変更を追跡し、必要に応じてUIを再配置します。
いくつかの