• 关于 Activity 横屏翻转 180度的问题


    今天做了一个横屏视频播放,需要实现用户横屏的时候,翻转180度,Activity也跟着翻转180度,经过查询资料终于搞定了。把它记下来,免得以后忘记。

    step1:

    为了防止翻转的时候重新创建Activity。所以需要在在androidmanifest.xml给Activity配置android:configChanges属性

    代码如下:

        <activity
                android:name="cc.angis.jy365.activity.VideoPlayerActivity"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:screenOrientation="landscape"
                android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />

     

    step2:

    最关键的就是这里了。因为我们给Activity配置了android:screenOrientation="landscape"属性,所以当手机翻转的时候,不会触发onConfigurationChanged方法了。。。同时也是因为onConfigurationChanged有些问题,所以弃之不用,改用OrientationEventListener来监听屏幕角度的旋转这个方法

    代码如下:

    class SreenOrientationListener extends OrientationEventListener {
    
            public SreenOrientationListener(Context context) {
                super(context);
            }
    
            @Override
            public void onOrientationChanged(int orientation) {
                if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
                    return; // 手机平放时,检测不到有效的角度
                }
                // 只检测是否有四个角度的改变
                if (orientation > 350 || orientation < 10) {
                    // 0度:手机默认竖屏状态(home键在正下方)
                    orientation = 0;
                } else if (orientation > 80 && orientation < 100) {
                    // 90度:手机顺时针旋转90度横屏(home建在左侧)
                } else if (orientation > 170 && orientation < 190) {
                    // 手机顺时针旋转180度竖屏(home键在上方)
                    orientation = 180;
                } else if (orientation > 260 && orientation < 280) {
                    // 手机顺时针旋转270度横屏,(home键在右侧)
                }
            }
        }

    然后分别在Activity的OnPause和OnResume中调用SreenOrientationListener的disable()和enable()方法。

    关于onConfigurationChanged方法的问题

    @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
        }

    在该函数中可以通过两种方法检测当前的屏幕状态:

    第一种:

    判断newConfig是否等于Configuration.ORIENTATION_LANDSCAPE,Configuration.ORIENTATION_PORTRAIT

    当然,这种方法只能判断屏幕是否为横屏,或者竖屏,不能获取具体的旋转角度。

    第二种:

    调用this.getWindowManager().getDefaultDisplay().getRotation();该函数的返回值,有如下四种:

    Surface.ROTATION_0,

    Surface.ROTATION_90,

    Surface.ROTATION_180,

    Surface.ROTATION_270

    其中,Surface.ROTATION_0 表示的是手机竖屏方向向上,后面几个以此为基准依次以顺时针90度递增。

    这种方法有一个Bug,它只能一次旋转90度,如果你突然一下子旋转180度,onConfigurationChanged函数不会被调用。

    参考资料:http://ticktick.blog.51cto.com/823160/1301209

  • 相关阅读:
    蓝桥网试题 java 基础练习 特殊的数字
    蓝桥网试题 java 基础练习 杨辉三角形
    蓝桥网试题 java 基础练习 查找整数
    蓝桥网试题 java 基础练习 数列特征
    蓝桥网试题 java 基础练习 字母图形
    蓝桥网试题 java 基础练习 01字串
    蓝桥网试题 java 基础练习 回文数
    蓝桥网试题 java 基础练习 特殊回文数
    Using text search in Web page with Sikuli
    each of which 用法
  • 原文地址:https://www.cnblogs.com/ywtk/p/4143275.html
Copyright © 2020-2023  润新知