1

このメソッドを使用してDisplay.getRotation()、アプリの画面の現在の向きを判断しています。これは、Google の次の役立つブログ エントリによるものです。

http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html

一言で言えば、ユーザーが図形などを画面に描画できる描画アプリがあり、描画キャンバスは同じ向きに保つ必要がありますが、オプションメニューなどを正しい場所に反転させたいと思っていましたユーザーがデバイスの向きを変えて描画を開始した場合。

キャンバスについてはonDraw()、方向をリクエストしてからgetRotation()、キャンバスを '0' の位置に戻して、エンド ユーザーの視点からキャンバスが動かないようにします。ユーザーがデバイスを非常にすばやく反転した場合を除い、魅力のように機能します...その後、回転が 0 であると報告され、キャンバスが元に戻らず、描画が反転または回転しているように見えます。getRotation()

興味深いことに、タイトル バーとオプション メニューは反転します。その後、ユーザーが描画を開始すると、次の への呼び出しonDraw()で正しい回転値が取得され、描画は正しい位置に戻りますが、ご想像のとおり、少し不安/煩わしいものです。これに対処するための戦略はありますか?

ありがとう。

4

2 に答える 2

0

onOrientationChanged() を使用します。現在の角度を度単位で返します。ディスプレイの向きの変更に対しては確実に機能するようです。次のように、角度を 4 つの標準方向に変換します。

    myOrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL)
    {

        @Override
        public void onOrientationChanged(int iAngle)
        {                         // 0  15 30 45 60 75, 90 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345
            final int iLookup[] = {0,   0, 0,90,90, 90,90, 90,  90, 180, 180, 180, 180, 180, 180, 270, 270, 270, 270, 270, 270, 0, 0, 0}; // 15-degree increments 
            if (iAngle != ORIENTATION_UNKNOWN)
            {
                int iNewOrientation = iLookup[iAngle / 15];
                if (iOrientation != iNewOrientation)
                {
                iOrientation = iNewOrientation;
                <do something with new orientation>
                }  
            }
        }
    };
于 2011-07-10T14:04:03.390 に答える