如何检测屏幕旋转

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

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

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

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

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

    我find了一篇值得一读的相关博客文章。

    请务必阅读SDK文档 。

    另请参阅有关使用Display.getRotation()正确重新映射传感器坐标的讨论。

    帮助类OrientationEventListener使得在旋转时获得回调变得非常容易。 我建议你试一试。

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

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

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

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

    查看一些示例代码