質問

コンパスを表示しているアクティビティがあります。針を適切に回転させるには、画面の向きを知る必要があります。これを適切に処理するには、90°と270°の回転を区別する必要があります。

画面を回転させると(少なくともNexus Sでは)、アクティビティのジェネラコディセタグコードが呼び出されます。ポートレートモードからランドスケープモードに回転するとき。上端を上げた状態で1つの横向きモードから別の横向きモードに回転すると、onCreateが2回呼び出されます(縦向き用に1回、ターゲット横向きモード用に1回)。

ただし、下端を上にして回転すると、画面が180度回転し、onCreate()が呼び出されません。この場合に発生するイベントはありますか?

役に立ちましたか?

解決

構成が実際に変更されていないため、180度回転しても、再起動されたり、構成が変更されたりすることはありません。 (それはまだ横向きまたは縦向きであり、他のすべては同じです。)

ただし、コンパスを表示している場合は、センサーイベントからコンパスを更新している必要があります。したがって、センサーの更新を取得するたびにDisplay.getRotation()を呼び出すだけで、画面の現在の回転を取得できます。実際、必要なのは、方向だけでなく、センサーイベントの解釈(または実際には、画面に到達したときにそれらの描画がどのように変更されるか)のローテーションです。

関連するブログ投稿が読む価値があります。

SDKのドキュメントを必ずお読みください。>

Display.getRotation()を使用してセンサー座標を正しく再マッピングすることについての議論

他のヒント

ヘルパークラス OrientalEventListener を使用すると、ローテーションでコールバックを簡単に取得できます。試してみることをお勧めします。

SensorManagerのドキュメントをご覧ください。加速度計を使用して最も正確な情報を取得する方法の最良の例と説明を入手してください。スマートフォンの向きを検出するだけで物を作る代わりに、そのAPIを使用すると、アスファルトやニードフォースピードなどのレースゲームで使用されているのと同じように、正確な回転を取得できます。

Monchoteが言ったように、コンパスで針を期待どおりに回転させるには、 UIを縦向きまたは横向きにロックすることをお勧めします。デバイスの回転角度に応じて針の角度を変更します。これは、オリエンテーションリスナーから簡単に取得できます。

このように、ユーザーが自動回転機能を開いているかどうかに関係なく、回転角の変更通知をいつでも受け取ることができます。こちらが参考になる良い例です。

OnConfigurationChanged メソッドを見てください。向きの変更を追跡し、必要に応じてUIを再配置します。

いくつかのサンプルコード

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top