有 2 种方法可以获得 3 个旋转值(方位角、俯仰角、滚动角)。
一个是注册一个 TYPE_ORIENTATION 类型的监听器。这是最简单的方法,我从每次旋转中得到正确的值范围,如文档所述:方位角:[0, 359] 俯仰:[-180, 180] 滚动:[-90, 90]
另一个是你第一次看到它时理解的最精确和最复杂的。Android推荐它,所以我想使用它,但我得到不同的值。
方位角:[-180, 180]。-180/180 是 S,0 i N,90 E 和 -90 W。
间距:[-90, 90]。90 是 90,-90 是 -90,0 是 0,但 -180/180(屏幕朝下)是 0。
滚动:[-180, 180]。
我应该得到相同的值,但使用小数,对吧?
我有以下代码:
aValues = new float[3];
mValues = new float[3];
sensorListener = new SensorEventListener (){
public void onSensorChanged (SensorEvent event){
switch (event.sensor.getType ()){
case Sensor.TYPE_ACCELEROMETER:
aValues = event.values.clone ();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mValues = event.values.clone ();
break;
}
float[] R = new float[16];
float[] orientationValues = new float[3];
SensorManager.getRotationMatrix (R, null, aValues, mValues);
SensorManager.getOrientation (R, orientationValues);
orientationValues[0] = (float)Math.toDegrees (orientationValues[0]);
orientationValues[1] = (float)Math.toDegrees (orientationValues[1]);
orientationValues[2] = (float)Math.toDegrees (orientationValues[2]);
azimuthText.setText ("azimuth: " + orientationValues[0]);
pitchText.setText ("pitch: " + orientationValues[1]);
rollText.setText ("roll: " + orientationValues[2]);
}
public void onAccuracyChanged (Sensor sensor, int accuracy){}
};
请帮忙。这非常令人沮丧。
我必须以这些价值观对待还是我做错了什么?
谢谢。