Android横屏180°旋转

时间:2016-10-31 14:29:28

标签: android screen-rotation

我需要知道我的Android设备屏幕何时从一个横向旋转到另一个横向(rotation_90到rotation_270)。 在我的Android服务中,我重新实现onConfigurationChanged(Configuration newConfig)以了解设备的旋转。但是,如果设备从ORIENTATION_PORTRAIT旋转到ORIENTATION_LANDSCAPE,则此方法仅由系统调用,而不是如果它从ORIENTATION_LANDSCAPE(90°)旋转到另一个ORIENTATION_LANDSCAPE }(270°)!!

在这种情况下如何调用? 感谢。

2 个答案:

答案 0 :(得分:1)

您可以为您的活动启用OrientationEventListener。

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

        @Override
        public void onOrientationChanged(int orientation) {
            Log.v(TAG, "Orientation changed to " + orientation);

            if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
                return;
            }

            int degrees = -1;
            if (orientation < 45 || orientation > 315) {
                Log.i(TAG, "Portrait");
            } else if (orientation < 135) {
                degrees = 90;
                Log.i(TAG, "Landscape");    // This can be reverse landscape
            } else if (orientation < 225) {
                degrees = 180;
                Log.i(TAG, "Reverse Portrait");
            } else {
                degrees = 270;
                Log.i(TAG, "Reverse Landscape"); // This can be landscape
            }
        }
    };

    if (mOrientationListener.canDetectOrientation() == true) {
        Log.v(TAG, "Can detect orientation");
        mOrientationListener.enable();
    } else {
        Log.v(TAG, "Cannot detect orientation");
        mOrientationListener.disable();
    }

答案 1 :(得分:0)

您可以使用以下代码将以前的方向保存为int成员变量:

int oldRotation =  getWindowManager().getDefaultDisplay().getRotation();

然后检查设备是否从一种横向模式旋转到另一种横向模式。

if(rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) {
     int newRotation =  getWindowManager().getDefaultDisplay().getRotation();
     if(newRotation != oldRotation) {
       // rotation from 90 to 270, or from 270 to 90
     }
     oldRotation = newRotation;
}