美文网首页
Android4.0 ICS怎么修改屏幕自动旋转的角度临界值

Android4.0 ICS怎么修改屏幕自动旋转的角度临界值

作者: RTThread小师弟 | 来源:发表于2017-11-01 17:38 被阅读21次

    【默认的角度】

    ICS对原本GB坐标矩阵换算的计算方式做了简化,简单地将360度平均划分为四个方向区间:

    区间0:[315,45) // 上

    区间1:[45,135) // 右

    区间2:[135,225) // 左

    区间3:[225,315) // 下

    区间的转换通过一个很简单的语句:

    windowOrientationListener.java的onSensorChanged函数中,

    int nearestRotation = (orientationAngle + 45) / 90;

    但是这并不意味着在45度时屏幕就会旋转,为了防止在临界值附近来回摆动,ICS中还定义了一个

    gap区域;

    顾名思义,在这个gap区域内,不会发生旋转;gap区域在两个相邻方向区间的中间;

    windowOrientationListener.java中有个全局变量定义了gap区的大小,

    ADJACENT_ORIENTATION_ANGLE_GAP,默认值是45,

    通过函数isOrientationAngleAcceptable来控制gap区的作用;

    所以真正的默认旋转角度临界值是45 + GAP/2 = 45 + 45/2 = 67.5度

    【修改默认角度临界值的例子】

    1. 如果要修改成在超过45度的角度旋转,并且横竖屏切换角度一致,就比较简单

    比如要在60度旋转,那么只需要计算GAP = (60-45)*2 = 30

    将ADJACENT_ORIENTATION_ANGLE_GAP改成30

    2. 其他情况根据需求会比较复杂,需要重新划分方向区间

    需求不同,很难一概而论,但是重新划分区间是一定要做的,

    比如需求是垂直转水平临界值是60度,水平转垂直是45度,

    那么需要做两个修改:

    (1)这个需求实际上已经定义了天然的gap区域,我们不需要ICS本身提供的gap机制,

    将isOrientationAngleAcceptable直接返回true;

    (2)修改方向区间,

    将int nearestRotation = (orientationAngle + 45) / 90改成:

    switch (mOrientationListener.mCurrentRotation)

    {

    // 原来是竖直,旋转60度生效

    ....

    原文:http://bbs.16rd.com/thread-55000-1-138.html

    相关文章

      网友评论

          本文标题: Android4.0 ICS怎么修改屏幕自动旋转的角度临界值

          本文链接:https://www.haomeiwen.com/subject/oimgpxtx.html