【问题标题】:Android gravity sensor values incorrect in orientation changeAndroid重力传感器值在方向更改中不正确
【发布时间】:2014-04-02 16:03:56
【问题描述】:
我正在尝试编写一个动态壁纸,其中物体从上到下掉落。问题是,在平板电脑(我使用的是 nexus 7 和 Galaxy Note)上,当屏幕方向发生变化时,我的对象不再掉落,但它们会朝错误的方向移动(如果将设备向右转动,它们会掉落对,如果我把它向左转,它们就会掉到左边,依此类推..)。
我正在使用重力传感器
mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
然后我沿 X 和 Y 轴计算重力的平方根来移动物体。
怎么可能让物体总是掉下来?
提前致谢!
我添加了一张图片来更好地解释这种行为。
【问题讨论】:
标签:
android
android-sensors
live-wallpaper
gravity
【解决方案1】:
我找到了一个简单的解决方案,在我的情况下效果很好:
我已经编写了这个方法来正确映射值:
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) 中的值映射到我的浮点数组 (gravity)。
希望这可能对某人有所帮助。