How to detect screen rotation through 180 degrees from landscape to landscape orientation?

后端 未结 3 1130
天涯浪人
天涯浪人 2020-12-03 10:43

I\'ve seen a few other questions similar to this but no answers.

Rotating from portrait to landscape (either direction) and back again, we get the helpful call to on

相关标签:
3条回答
  • 2020-12-03 11:03

    I use this code to have it work for my case.

      OrientationEventListener mOrientationEventListener = new OrientationEventListener(mActivity)
      {
         @Override
         public void onOrientationChanged(int orientation)
         {
            if (orientation == ORIENTATION_UNKNOWN) return;
    
            int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation();
            switch (rotation) {
              case Surface.ROTATION_0:
                 android.util.Log.i(TAG, "changed ROTATION_0 - " + orientation);
                 break;
              case Surface.ROTATION_90:
                 android.util.Log.i(TAG, "changed ROTATION_90 - " + orientation);
                 break;
              case Surface.ROTATION_180:
                 android.util.Log.i(TAG, "changed ROTATION_180 - " + orientation);
                 break;
              case Surface.ROTATION_270:
                 android.util.Log.i(TAG, "changed ROTATION_270 - " + orientation);
                 break;
            }
            if ((rotation != mLastRotation) && (rotation & 0x1) == (mLastRotation & 0x1))
            {
               android.util.Log.i(TAG, "unhandled orientation changed >>> " + rotation);
            }
            mLastRotation = rotation;
         }
      };
    
      if (mOrientationEventListener.canDetectOrientation()){
         mOrientationEventListener.enable();
      }
    
    0 讨论(0)
  • 2020-12-03 11:15

    May be you should add some logical code in your OrientationEventListener like this:

    mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    
    OrientationEventListener orientationEventListener = new OrientationEventListener(this,
            SensorManager.SENSOR_DELAY_NORMAL) {
        @Override
        public void onOrientationChanged(int orientation) {
    
            Display display = mWindowManager.getDefaultDisplay();
            int rotation = display.getRotation();
            if ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && rotation != mLastRotation) {
                Log.i(TAG, "changed >>> " + rotation);
    
                // do something
    
                mLastRotation = rotation;
            }
        }
    };
    
    if (orientationEventListener.canDetectOrientation()) {
        orientationEventListener.enable();
    }
    
    0 讨论(0)
  • 2020-12-03 11:17

    OrientationEventlistener won't work when the device isn't rotating/moving.

    I find display listener is a better way to detect the change.

         DisplayManager.DisplayListener mDisplayListener = new DisplayManager.DisplayListener() {
            @Override
            public void onDisplayAdded(int displayId) {
               android.util.Log.i(TAG, "Display #" + displayId + " added.");
            }
    
            @Override
            public void onDisplayChanged(int displayId) {
               android.util.Log.i(TAG, "Display #" + displayId + " changed.");
            }
    
            @Override
            public void onDisplayRemoved(int displayId) {
               android.util.Log.i(TAG, "Display #" + displayId + " removed.");
            }
         };
         DisplayManager displayManager = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE);
         displayManager.registerDisplayListener(mDisplayListener, UIThreadHandler);
    
    0 讨论(0)
提交回复
热议问题