将设备方向转换为LANDSCAPE,PORTRAIT,LANDSCAPE_REVERTED和PORTRAIT_REVERTED

时间:2013-03-01 10:59:09

标签: android math

我有一个任务,我必须将设备(非活动)方向转换为4个值(LANDSCAPE,PORTRAIT,LANDSCAPE_REVERTED和PORTRAIT_REVERTED)。我提出了一个解决方案,但它使用了固定值,并不代表Android如何以及何时更改活动方向的功能。

我无法找到一个api,可以轻松通知听众设备何时将其方向更改为指定的4个值。

如果有人可以分享android如何计算方向的功能并通知WindowManager改变活动的方向,那将是不错的。

[解决] 的 对于谁可能最终与我相同的情况。 框架/碱/核心/ JAVA /机器人/视图/ WindowOrientationListener.java

此侦听器包含通知活动改变其方向的所有魔法。

5 个答案:

答案 0 :(得分:1)

在onConfigChanges()中,只要您的屏幕方向发生变化,您就会立即得到通知,并且您可以随时获得您的屏幕方向:

Display getOrient = getWindowManager().getDefaultDisplay();
switch(orientation){
case Configuration.ORIENTATION_LANDSCAPE:
Log.e();
break;
case Configuration.ORIENTATION_PORTRAIT:
Log.e();
break;
}

答案 1 :(得分:0)

使用项目清单中的screenOrientation并设置方向。

<activity
            android:name=".SplashScreen"
            android:screenOrientation="portrait"
</activity>

答案 2 :(得分:0)

如果您希望活动以横向模式显示和对齐,则在drawable中添加文件夹即layout-landscape,如果您希望应用程序仅在纵向模式下运行,则在清单中声明如下

android:screenOrientation="portrait"

或您想要在横向模式中

 android:screenOrientation="landscape"

答案 3 :(得分:0)

我很确定OS会计算设备的旋转并在旋转角度改变60度时改变方向。因此,如果设备处于纵向方向且旋转角度等于0,则当设备旋转时表示逆时针旋转,旋转角度将增加,当旋转角度约为60度时,OS将变为横向。现在假设当您顺时针旋转设备时设备处于横向方向,角度将减小,并且在大约30度时操作系统将更改为纵向方向。

方向改变状态
左侧是当前方向 右侧是设备旋转时的新方向 肖像---&gt; <逆时针旋转旋转角度> 60个
肖像---&gt; Landscape_Reverse 旋转顺时针旋转角度&lt; -60
风景---&gt;纵向旋转顺时针旋转角度&lt; 30个
风景---&gt; 旋转逆时针旋转角度> 150个
Landscape_Reverse ---&gt; <纵向旋转逆时针旋转角度> -30
Landscape_Reverse ---&gt; Portrait_Reverse 旋转顺时针旋转角度&lt; -150

当设备平放时,无法计算旋转角度。这就是为什么如果您在设备平放并且旋转设备时启动应用程序,则不会发生方向更改 您可以在我How to measure the tilt of the phone in XY plane using accelerometer in Android

的答案中查看如何计算旋转角度

答案 4 :(得分:0)

使用 getRotation()

Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();

来自文档

  

从“自然”方向返回屏幕的旋转。该   返回值可能是Surface.ROTATION_0(无旋转),   Surface.ROTATION_90,Surface.ROTATION_180或Surface.ROTATION_270。   例如,如果设备具有自然高的屏幕,并且用户具有   把它转向侧面进入横向,价值   这里返回的可能是Surface.ROTATION_90或   Surface.ROTATION_270取决于它的转动方向。该   angle是屏幕上绘制图形的旋转,即   与设备物理旋转相反的方向。对于   例如,如果设备逆时针旋转90度,则为   补偿渲染将顺时针旋转90度   这里返回的值是Surface.ROTATION_90。