我有一个显示指南针的活动,并且需要知道屏幕的方向以正确旋转指针。我需要区分90度和270度的旋转,以正确处理这个问题。
当我旋转屏幕时(至少在我的Nexus S上),活动的onCreate
会被调用,例如当我从纵向模式旋转到横向模式时。当我将顶部边缘抬起,从一个横向模式旋转到另一个横向模式时,onCreate()
会被调用两次(一次为纵向方向,一次为目标横向模式)。
然而,当我将底部边缘向上旋转180度时,屏幕不会触发onCreate
。在这种情况下,是否有触发的事件?
我有一个显示指南针的活动,并且需要知道屏幕的方向以正确旋转指针。我需要区分90度和270度的旋转,以正确处理这个问题。
当我旋转屏幕时(至少在我的Nexus S上),活动的onCreate
会被调用,例如当我从纵向模式旋转到横向模式时。当我将顶部边缘抬起,从一个横向模式旋转到另一个横向模式时,onCreate()
会被调用两次(一次为纵向方向,一次为目标横向模式)。
然而,当我将底部边缘向上旋转180度时,屏幕不会触发onCreate
。在这种情况下,是否有触发的事件?
您的观点是正确的,当屏幕旋转 180 度时,您不会重新启动或更改配置,因为配置实际上并没有改变。(它仍处于横向或纵向,并且其他所有内容都相同。)
但是,如果您正在显示罗盘,则必须意味着您正在从传感器事件进行更新。因此,每次获取传感器更新时,您可以调用 Display.getRotation() 来获取屏幕的当前旋转角度。事实上,您需要的是解释传感器事件的旋转方向(或者实际上是在屏幕上绘制它们时将如何被修改),而不仅仅是方向。
我找到了一篇相关的博客文章,非常值得阅读。
(阅读原文)请务必阅读 SDK 文档。
(阅读原文)还请查看有关使用 Display.getRotation() 正确重映射传感器坐标的讨论。
(阅读原文)只需查看传感器管理器文档,您就可以获得如何使用加速度计获取最精确信息的最佳示例和解释。与仅通过检测手机方向来完成任务不同,使用该API,您可以获得完全旋转,就像赛车游戏Asphalt和Need For Speed所使用的一样。
查看OnConfigurationChanged方法,以跟踪方向更改并根据需要重新排列您的UI。
查看一些示例代码