• Android屏幕旋转


            一个手机最基本的旋转方向有上面4种,而在Android开发中,涉及到屏幕旋转的地方很多,而且各个函数给出的角度值都不一样,比如 Activity的getRotate,Camera的setDisplayOrientation,Sensor的onOrientationChanged,这些API都会给出一个角度值,这些角度值是如何跟手机当前的旋转方向对应的呢?

    1. Activity的Oritentation

    在Activity中,如果你希望知道当前的屏幕是横屏还是竖屏时,可以通过getRequestedOrientation()获取,它的值主要有如下2种:

    ORIENTATION_PORTRAIT,ORIENTATION_LANDSCAPE

    如果用户的手机没有开启重力感应器或者在AndroidManifest.xml中设置了android:screenOrientation,默认情况下,该Activity不会响应屏幕旋转事件。
    如果在这种情况下,依然希望Activity能响应屏幕旋转,则添加如下代码:

    // activity的 onCreate 函数中
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);

    当你的Activity添加了android:configChanges="orientation|screenSize"属性,并且重载了public void onConfigurationChanged(Configuration newConfig)函数后,你会在手机屏幕旋转的时候在函数onConfigurationChanged中得到即将旋转的屏幕发向,由newConfig.orientation 给出,判断newConfig是否等于Configuration.ORIENTATION_LANDSCAPE,Configuration.ORIENTATION_PORTRAIT。
    这种方式,你只能知道当前的手机是横屏还是竖屏,你无法准确地知道当前手机被旋转到了哪个方向。

    2. Activity的 Rotation

    在Activity中,还提供了一个接口,就是获取当前手机的旋转角度:

    getWindowManager().getDefaultDisplay().getRotation()

    这个接口返回的值主要有如下4个:

    Surface.ROTATION_0,

    Surface.ROTATION_90,

    Surface.ROTATION_180,

    Surface.ROTATION_270

    依次代表手机的如下几个方向:

    090931142.png

    对于Activity,默认的手机方向是:竖屏Home键在下面,这个方向是Activity的0度方向。

    注意:它的角度规律是:“逆时针”方向旋转递增,每次递增90度。

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

    3. 相机的Preview方向

    根手机屏幕相关的最常见的应用就是Camera相关的应用了,下面分析系统关于Camera的Preview方向的定义。

    你可以通过编写一个简单的测试程序来验证这个定义,这里我就不给出源码了,直接给出得到的结论,系统定义的Camera方向如下:

    091001570.png

    对于Camera默认情况下,手机横屏,HOME键在右边,这个方向是Camera的0度方向。(注:关于Camera的Preview方向的设置的函数为setDisplayOrientation)

    注意:它的角度递增规律是:“顺时针”方向旋转,每次递增90度。

    4. 传感器得到的屏幕方向

    通过派生OrientationEventListener 类,监听传感器给出的信息来确定屏幕的方向,这种方法比Activity的onConfigurationChanged 要准确很多,而且还可以支持把固定了Activity方向的应用。该派生类会重载一个函数:

    public void onOrientationChanged(int orientation)

    它不需要等待手机旋转了90度才会有反应,而是在手机旋转了任何角度的时候,都会回调onOrientationChanged告诉你当前手机的角度,当然,如果你只希望得到4个角度的变化事件,可以自己在该函数中做判断,这里给出它的值分别对应的手机方向:

    091030816.png

    对于Sensor,默认的手机方向是:竖屏Home键在下面,这个是Sensor的0度方向。

    注意:它的角度递增规律是:“顺时针”方向旋转,每次递增90度。

    参考链接:http://blog.51cto.com/ticktick/1346579

  • 相关阅读:
    linux内核(四)内存管理单元MMU
    open函数详解
    linux内核(三)文件系统
    C++中数字与字符串之间的转换 scanf string总结(复习必读)
    hello程序的运行过程-从计算机系统角度
    剑指offer第12题打印从1到n位数以及大整数加法乘法
    2017-10-11第二次万革始面经
    为什么需要半关闭
    Ubuntu指令
    143. Reorder List
  • 原文地址:https://www.cnblogs.com/klcf0220/p/8385052.html
Copyright © 2020-2023  润新知