web-dev-qa-db-ja.com

画面の回転を検出するにはどうすればよいですか

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

画面を回転させると(少なくともNexus Sでは)、アクティビティのonCreateが呼び出されます。ポートレートモードからランドスケープモードに回転すると、上のEdgeを上げて1つの横向きモードから別の横向きモードに回転すると、onCreate()が2回呼び出されます(縦向きの場合は1回、ターゲットの横向きモードの場合は1回)。

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

15
Michael

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

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

読む価値がある の関連ブログ投稿を見つけました。

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

また、センサー座標を正しく再マップするためのDisplay.getRotation()の使用について、 ディスカッション も確認してください。

11
hackbod

ヘルパークラス OrientationEventListener を使用すると、ローテーション時にコールバックを非常に簡単に取得できます。ぜひ試してみてください。

6
monchote

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

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

0
Daniel Kao

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

0
Nathan Campos