我有一个显示指南针的活动,我需要知道屏幕的方向才能正确旋转指针。我需要区分 90° 和 270° 旋转以正确处理这个问题。
当我旋转屏幕(至少在我的 Nexus S 上)时,onCreate
会调用活动,例如当我从纵向模式旋转到横向模式时。当我从一种横向模式旋转到另一种并抬起顶部边缘时,onCreate()
会被调用两次(一次用于纵向,一次用于目标横向模式)。
但是,当我旋转底部边缘向上时,屏幕旋转 180° 并且onCreate
没有被调用。在这种情况下是否有事件被触发?
我有一个显示指南针的活动,我需要知道屏幕的方向才能正确旋转指针。我需要区分 90° 和 270° 旋转以正确处理这个问题。
当我旋转屏幕(至少在我的 Nexus S 上)时,onCreate
会调用活动,例如当我从纵向模式旋转到横向模式时。当我从一种横向模式旋转到另一种并抬起顶部边缘时,onCreate()
会被调用两次(一次用于纵向,一次用于目标横向模式)。
但是,当我旋转底部边缘向上时,屏幕旋转 180° 并且onCreate
没有被调用。在这种情况下是否有事件被触发?
您是正确的,在 180 度旋转时您不会重新启动或更改配置,因为配置实际上并未更改。(它仍然是横向或纵向的,其他一切都一样。)
但是,如果您正在显示指南针,那一定意味着您正在从传感器事件中更新它。因此,您可以在每次获得传感器更新时调用 Display.getRotation() 以获取屏幕的当前旋转。事实上,您需要的是旋转解释传感器事件(或者实际上当它到达屏幕时如何修改它们的绘制),而不仅仅是方向。
我找到了一篇相关的博文,非常值得一读。
请务必阅读SDK 文档。
另请查看有关使用 Display.getRotation() 正确重新映射传感器坐标的讨论。
辅助类OrientationEventListener可以很容易地获得旋转回调。我建议你试一试。
只需查看SensorManager 文档,您就可以获得关于如何使用加速度计获取最精确信息的最佳示例和说明。无需仅通过检测手机方向来制作东西,使用该 API 您可以获得精确的旋转,就像 Asphalt 和 Need For Speed 等赛车游戏所使用的那样。
正如 Monchote 所说,为了让您的指针在指南针上按预期旋转,最好将您的 UI 锁定为纵向或横向,并根据设备旋转角度更改您的指针角度,这可以从OrientationListener轻松获得。
这样,无论用户是否开启了自动旋转功能,都可以随时收到旋转角度变化的通知。这是一个很好的例子供您参考。
查看OnConfigurationChanged方法以跟踪方向更改并根据需要重新排列 UI。
查看一些示例代码