【问题标题】:Android Accelerometer IssueAndroid 加速度计问题
【发布时间】:2011-08-17 14:10:55
【问题描述】:

我的游戏使用加速度计,一切正常,但我注意到某些手机会出现小问题。游戏强制方向为横向,但有些手机的默认屏幕方向为横向...

现在我一直假设用户必须倾斜手机才能正确观看游戏,这意味着 X 轴的加速度计读数会在 Y 轴上移动玩家,而 Y 轴上的读数会移动玩家在 X 中。对于具有默认横向屏幕的手机,X 将对应于游戏中的 X,Y 对应于游戏中的 Y(因为他们不需要倾斜手机。)

我的问题是我该如何处理?我可以调整代码以根据手机方向反转 X 和 Y 方向,那么如何以编程方式获取手机的当前方向?如果有更好的方法就好了

希望这是有道理的

编辑:

实际上,假设如果设备长度大于其高度,那么屏幕将默认为横向是否安全?

【问题讨论】:

    标签: android accelerometer


    【解决方案1】:
    Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
    int rotation = display.getRotation();
    

    来自http://developer.android.com/reference/android/view/Display.html

    public int 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。

    您必须对这些设备进行试验,以确保 android 能够正确识别“自然”方向。如果是这样,那么只需检查 ROTATION_90(或 ROTATION_270)以查看设备是否在其一侧。如果是,则切换 x 和 y 轴。

    【讨论】:

    • 我试过了,但不管手机是什么方式,它总是返回 0?
    • “旋转”值是否取决于屏幕当前的旋转或我的应用程序对其施加的旋转?当我旋转手机时,这个值似乎没有改变,但它不同于与纵向手机相比的“自然”横向手机
    【解决方案2】:

    这是 NVidia 提供的一个解决方案,可以很好地处理设备默认方向: https://stackoverflow.com/a/14313663/1489493

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多