Android 重力传感器值在方向变化时不正确

标签 android android-sensors live-wallpaper gravity

我正在尝试编写一个动态壁纸,其中物体从上到下掉落。问题是,在平板电脑上(我使用的是 Nexus 7 和 Galaxy Note),当屏幕方向改变时,我的物体不再掉落,但它们会走向错误的方向(如果向右转动设备,它们就会掉落)右边,如果我向左转,它们就会落到左边,依此类推..)。

我正在使用重力传感器

mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);

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

怎样才能让物体一直往下掉呢? 提前致谢!

我添加了一张图像来更好地解释这种行为。

description

最佳答案

我找到了一个简单的解决方案,在我的例子中效果很好:

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

    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)映射到我的 float 组(重力)中。

希望这可以帮助某人。

关于Android 重力传感器值在方向变化时不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22817052/

相关文章:

java - Android Room Persistence Library 在库项目中不起作用

java - Android Activity 流程 - 从基父类(super class)到子类再到基类

java - 手持手机可以模拟的最大 g 力值是多少?

android - 三星 galaxy tab 10.1 模拟器

android - 在 fragment 期间处理后退按钮键

android - 任何想法“ERROR/QemuSensors(13441) : data__poll: len=-1, errno=9: Bad file number”

android - 无法更改加速度计的速率

安卓动态壁纸在设备上是空白的

android - 为动态壁纸选择背景

Android 动态壁纸触摸事件层次结构