15

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

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

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

4

5 に答える 5

11

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

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

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

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

Display.getRotation() を使用してセンサー座標を正しく再マッピングする方法についての説明も確認してください。

于 2011-01-30T17:59:20.527 に答える
6

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

于 2012-07-02T10:11:34.133 に答える
0

SensorManager Documentationを参照してください。加速度計を使用して最も正確な情報を取得する方法の最良の例と説明が得られます。電話の向きを検出するだけで物を作るのではなく、その API を使用すると、Asphalt や Need For Speed などのレース ゲームで使用されるのと同じように、正確な回転を取得できます。

于 2011-01-30T17:10:55.787 に答える
0

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

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

于 2013-05-27T18:47:30.750 に答える
-2

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

サンプルコードを見る

于 2011-01-30T17:34:56.480 に答える