如何检测屏幕旋转

时间:2011-01-30 15:54:19

标签: android screen-rotation

我有一个显示指南针的活动,我需要知道屏幕的方向才能正确旋转指针。我需要区分90°和270°旋转才能正确处理。

当我旋转屏幕时(至少在我的Nexus S上),活动的onCreate被调用,例如当我从纵向模式旋转到横向模式时。当我从一个横向模式旋转到另一个横向边缘时,onCreate()被调用两次(一次用于纵向,一次用于目标横向模式)。

然而,当我以底边向上旋转时,屏幕旋转180°并且不会调用onCreate。在这种情况下会有被触发的事件吗?

5 个答案:

答案 0 :(得分:11)

你是正确的,在180度旋转时你不会重新启动或获得配置更改,因为配置实际上没有改变。 (它仍然是风景或肖像,其他一切都是一样的。)

但是,如果您要显示指南针,则必须表示您正在从传感器事件中更新它。因此,每次获得传感器更新以获取屏幕的当前旋转时,您都可以调用Display.getRotation()。事实上,你需要是解释传感器事件的旋转(或实际上当它到达屏幕时如何修改它们的绘制),而不仅仅是方向。

我找到了一篇相关的博文well worth reading

请务必阅读SDK documentation

另请查看the discussion有关使用Display.getRotation()正确重新映射传感器坐标的信息。

答案 1 :(得分:6)

帮助程序类OrientationEventListener可以很容易地在轮换时获得回调。我建议你试一试。

答案 2 :(得分:0)

只需看看SensorManager Documentation,您就可以获得有关如何使用加速度计获取最精确信息的最佳示例和说明。而不是通过检测手机方向来制作东西,使用该API可以获得精确的旋转,就像赛车游戏如Asphalt和Need For Speed所使用的那样。

答案 3 :(得分:0)

正如Monchote所说,为了让您的指针在指南针上按预期旋转,最好将您的UI锁定为纵向或横向,并根据设备旋转角度更改针角度,这可以从OrientationListener轻松获得。

这样,无论用户是否打开自动旋转功能,您始终可以获得旋转角度变化通知。 Here是一个很好的例子供您参考。

答案 4 :(得分:-2)

查看OnConfigurationChanged方法以跟踪方向更改并根据需要重新排列用户界面。

查看一些sample code