我试图写一个动态壁纸,其中物体从上到下掉落。问题是在平板电脑上(我使用nexus 7和星系音符)当屏幕方向改变时,我的物体不会再掉下来但是它们朝着错误的方向转动(如果转向设备正确的话正在向右倾斜,如果我向左转,它们会向左倾斜,依此类推......)。
我正在使用重力传感器
mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
我计算沿X和Y轴的重力平方根来移动物体。
如何使对象始终掉下来? 提前谢谢!
我添加图片以更好地解释这种行为。
答案 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)中的值映射到我的浮点数组(重力)。
希望这可能有助于某人。