android.view.onSensorChanged()的n个参考页设备的轴被描述为
X轴是指屏幕的水平轴(在纵向模式下是小边,在横向模式下是长边),指向右边。Y轴是指屏幕的垂直轴,指向屏幕的顶部(原点在左下角)。当设备仰卧在桌子上时,Z轴指向天空。
而且,在android.hardware.SensorManager.getOrientation(),中提到,该方法将返回设备的方位角、俯仰角和滚动角,它们在逆时针方向上为正。但是,当我从我的代码中调用函数并打印值时,方位和间距在顺时针方向上是正的,而在逆时针方向上是负的。通过android.hardware.SensorManager.getRotationMatrix()获得的旋转矩阵满足要求,如果我所说的是正确的,即方位和俯仰在顺时针方向上是+ve,而滚动在逆时针方向上是+ve。如果我错了,请纠正我。我使用的是HTC Wildfire S,它运行在Android 2.3.3上。
我添加了代码段,我用它来获取方向值。
sensormanager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
Sensor gsensor = sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Sensor msensor = sensormanager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sensormanager.registerListener(this, gsensor, SensorManager.SENSOR_DELAY_GAME);
sensormanager.registerListener(this, msensor, SensorManager.SENSOR_DELAY_GAME);
-------------------------------------------------------------------------------
final float rad2deg = (float)(180.0f/Math.PI);
int type = event.sensor.getType();
float[] data;
if (type == Sensor.TYPE_ACCELEROMETER) {
data = gravityValues;
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
data = geomagneticValues;
} else {
return;
}
for (int i=0 ; i<3 ; i++)
data[i] = event.values[i];
SensorManager.getRotationMatrix(rValues, null, gravityValues, geomagneticValues);
SensorManager.getOrientation(rValues, mOrientation);
result.setText("Compass yaw: " + (int)(mOrientation[0]*rad2deg) + " pitch: " + (int)(mOrientation[1]*rad2deg) +" roll: " + (int)(mOrientation[2]*rad2deg) );如果我遗漏了任何必要的信息,请让我知道。提前谢谢。
发布于 2012-03-31 08:10:17
文档是正确的,getOrientation调用中的Z轴指向地球。因此,逆时针方向在正常意义上就是顺时针方向。
https://stackoverflow.com/questions/7471788
复制相似问题