Android重力传感器值在方向更改时不正确

时间:2014-04-02 16:03:57

标签: android android-sensors live-wallpaper gravity

我试图写一个动态壁纸,其中物体从上到下掉落。问题是在平板电脑上(我使用nexus 7和星系音符)当屏幕方向改变时,我的物体不会再掉下来但是它们朝着错误的方向转动(如果转向设备正确的话正在向右倾斜,如果我向左转,它们会向左倾斜,依此类推......)。

我正在使用重力传感器

mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);

我计算沿X和Y轴的重力平方根来移动物体。

如何使对象始终掉下来? 提前谢谢!

我添加图片以更好地解释这种行为。

description

1 个答案:

答案 0 :(得分:2)

我发现了一个简单的解决方案,在我的情况下工作正常:

我已经编写了这个方法来正确映射值:

    private void mapSensors(float[] input, float[] output) {
        switch (((WindowManager) getApplicationContext().getSystemService(
                Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation()) {
        case 0:
            output[0] = input[0];
            output[1] = input[1];
            break;
        case 1:
            output[0] = -input[1];
            output[1] = input[0];
            break;
        case 2:
            output[0] = -input[0];
            output[1] = -input[1];
            break;
        case 3:
            output[0] = input[1];
            output[1] = -input[0];
            break;
        }
    }

这个方法就像这样调用:

    @Override
    public void onSensorChanged(SensorEvent event) {
        mapSensors(event.values, gravity);
    }

它将传感器(event.values)中的值映射到我的浮点数组(重力)。

希望这可能有助于某人。