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

【默认的角度】

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怎么修改屏幕自动旋转的角度临界值)