Activity用户点击转屏后,恢复自由转屏

来源:互联网 发布:自动抢红包软件 编辑:程序博客网 时间:2024/06/03 18:18


场景:在播放器界面,用户旋转手机,自动横竖屏切换,当用户处于竖屏点击全屏按钮时,应该转到横屏(使用Activity.setRequestedOrientation会导致屏幕固定为横屏)



方案如下,不使用系统的自动转屏,自动转屏代码完全自己控制,代码如下:


用户点击全屏和竖屏调用   setActivityOrientation


import android.app.Activity;import android.content.pm.ActivityInfo;import android.util.Log;import android.view.OrientationEventListener;/** * Activity方向控制,主要解决点击转屏后不能恢复到自由转屏状态问题。 * */public class ActivityOrientationControl {    private static final String TAG = ActivityOrientationControl.class.getSimpleName();    private Activity mActivity;    private OrientationEventListener mOrientationEventListener;    private int mUserClickRecordCurrOrientation = -1;    public ActivityOrientationControl(Activity activity) {        mActivity = activity;        mOrientationEventListener = new OrientationEventListener(activity) {            @Override            public void onOrientationChanged(int orientation) {                if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {                    // 手机平放时,检测不到有效的角度                    return;                }                // 只检测是否有四个角度的改变                if (orientation > 350 || orientation < 10) {                    orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;                } else if (orientation > 80 && orientation < 100) {                    orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;                } else if (orientation > 170 && orientation < 190) {                    orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;                } else if (orientation > 260 && orientation < 280) {                    orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;                } else {                    return;                }                             Log.d(TAG, "orientation = " + orientation);                             if (mUserClickRecordCurrOrientation == orientation) {                    // 用户停留在点击时所处的方向,不要让重力感应改变方向                    return;                } else if (mUserClickRecordCurrOrientation != -1) {                    // 用户离开点击时所处的方向,变为可以自由旋转                    mUserClickRecordCurrOrientation = -1;                    return;                }                switch (orientation) {                    case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:                        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);                        break;                    case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:                        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);                        break;                    default:                        break;                }            }        };    }    public void enable() {        if (mOrientationEventListener.canDetectOrientation()) {            mOrientationEventListener.enable();        }    }    public void disable() {        if (mOrientationEventListener.canDetectOrientation()) {            mOrientationEventListener.disable();        }    }    public void setActivityOrientation(int orientation) {        mUserClickRecordCurrOrientation = mActivity.getRequestedOrientation();        switch (orientation) {            case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:                mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);                break;            case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:                mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);                break;        }    }}

原创粉丝点击