我正在尝试编写一个动态壁纸,其中物体从上到下掉落。问题是,在平板电脑上(我使用的是 Nexus 7 和 Galaxy Note),当屏幕方向改变时,我的物体不再掉落,但它们会走向错误的方向(如果向右转动设备,它们就会掉落)右边,如果我向左转,它们就会落到左边,依此类推..)。
我正在使用重力传感器
mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
我计算沿 X 和 Y 轴的重力平方根来移动物体。
怎样才能让物体一直往下掉呢? 提前致谢!
我添加了一张图像来更好地解释这种行为。
最佳答案
我找到了一个简单的解决方案,在我的例子中效果很好:
我编写了这个方法来正确映射值:
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/