应该说是安卓设备在某个平面内的旋转角度如何监听?
背景:在某些场景中,用户在与Activity交互,用户在不断调整设备的方向,0°~360°,有的时候
Activity的画面需要做出调整,例如在90°或者270°时候【这里说顺时针方向】,设备实际处于横屏
了,在0°或360°时,设备处于竖屏。
有的同学说在Activity的清单中,添加
android:configChanges="orientation|keyboardHidden|screenSize"
并在Activity中重写 onConfigurationChanged(Configuration newConfig) 方法中监听。但很遗憾,
这种方式只是监听到设备横竖屏切换的时候的回调,无法知道角度。在newConfig中,只能判断
orientation 是否等于Configuration的某个值,如判断是否等于ORIENTATION_LANDSCAPE
用来判断是不是设备处于横屏。
还有的同学说通过这种方式:
int angle = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
然后是
switch(angle) {
case: Surface.ROTATION_0:
break;
case: Surface.ROTATION_90:
break;
case: Surface.ROTATION_180:
break;
case: Surface.ROTATION_270:
break;
}
现实中这个方法由于各大设备厂商系统不一致,有的设备在某些角度不回调也可能,例如,逆时针180°、270°的时候,有的设备不回调的。
想要无死角监听角度变化,可以使用 OrientationEventListener 这个类来监听。使用方式如下:
1、初始化:一般建议在onCreate中初始化
orientationEventListener = new OrientationEventListener(this) { @Override public void onOrientationChanged(int angle) { MyLog.d("MainActivity---角度angle="+angle); } }; 2、启用 :orientationEventListener.enable(); //一般建议在onResume中启用
3、禁用 :orientationEventListener.disable(); //一般建议在onPause中禁用
具体用法,需要结合自身业务情况在合适的位置启用和禁用