安卓某个Activity的旋转角度如何监听?

应该说是安卓设备在某个平面内的旋转角度如何监听?

背景:在某些场景中,用户在与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中禁用

     具体用法,需要结合自身业务情况在合适的位置启用和禁用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值