屏幕旋转--自动及手动控制(视频播放中setRequestedOrientation之后手机屏幕的旋转不触发onConfigurationChanged方法)

来源:互联网 发布:淘宝信誉度怎么看 编辑:程序博客网 时间:2024/06/09 20:04
在调用了setRequestedOrientation之后,手机屏幕的旋转不触发onConfigurationChanged方法,这个时候需要再调用一次

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);方法,让他开启自动旋转事件


如代码:

/**     * 开启监听器     */    private final void startListener() {        mOrientationListener = new OrientationEventListener(this) {            @Override            public void onOrientationChanged(int rotation) {            if (startRotation == -2) {//初始化角度startRotation = rotation;}            //变化角度大于30时,开启自动旋转,并关闭监听            int r = Math.abs(startRotation - rotation);            r = r > 180 ? 360 - r : r;            if (r > 30) {            //开启自动旋转,响应屏幕旋转事件            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);            this.disable();}            }        };    }


在手动旋转按钮监听事件中写下

//设置完之后变成强制设定为横屏或纵屏,如同AndroidManifest.xml中设置了android:screenOrientationif (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}//2秒后开启屏幕旋转监听,用来开启自动旋转,响应屏幕旋转事件orientationHandler.sendEmptyMessageDelayed(0, 2000);


最后设置handler

private OrientationEventListener mOrientationListener; // 屏幕方向改变监听器private int startRotation;Handler orientationHandler = new Handler(){public void handleMessage(Message msg) {startRotation = -2;mOrientationListener.enable();};};


1 0