0

向きを縦向きまたは横向きに固定するのは簡単です。

<activity android:name=".MyActivity"
           android:screenOrientation="portrait">

または、画面が回転したときにキャプチャするには:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

しかし、ローテーションイベントが発生する前に、どうすればキャプチャできますか?向きが変わった場合にレイアウトで何が起こるかを制御し、実際に画面を回転させるデフォルトの動作をオーバーライドしたいと思います。出来ますか?

4

2 に答える 2

3

このコードをonPause()メソッドで使用します。回転が変化すると、アクティビティはそれ自体を再構築します。つまり、on-Createが再度呼び出され、前のアクティビティはfinish()です。

    int currentOrientation = getResources().getConfiguration().orientation;
    if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE){
        if (display.getRotation() == Surface.ROTATION_0)
        // play with different angles e.g ROTATION_90, ROTATION_180
    }

したがって、回転が変更されると、前のアクティビティのonPause()が呼び出され、その段階で、新しい方向で必要なものを決定できます。

于 2013-03-04T11:47:37.193 に答える
0
  1. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);アクティビティを強制的に1つのモード(例:ランドスケープ)にとどめるonCreate(..)

  2. 独自のオリエンテーションリスナーを添付し、

    directionEventListener = new OrientationEventListener(this、SensorManager.SENSOR_DELAY_UI){

            @Override
            public void onOrientationChanged(int orientation) {
                if (Math.abs(orientation - 90) < 30){
                       // your device orientation has changed, you can update UI                        accordingly, (layout won't rotate).
            }
        };
        orientationEventListener.enable();
    

これを行うと、構成の変更を破棄したときに「反転」されたタッチイベントのx軸とy軸を受け取ることに注意してください。また、ナビゲーションバーがある場合は、そのままの状態で回転しません。

于 2013-10-08T08:27:57.587 に答える