我对“指南针”有一点问题。
我想在屏幕上显示我用相机看的方向。为此,我有一个CameraView
和一个Activity
在横向模式下运行。
现在我尝试通过传感器获取方向,但出了点问题。当我启动应用程序时,它会显示一些奇怪的数据,但在摇晃手机后它会显示正确的数据?!
也许你可以帮助我。这是我的 onSensorChanged 方法:
public void onSensorChanged(SensorEvent event) {
int type = event.sensor.getType();
if (type == Sensor.TYPE_ACCELEROMETER) {
mGrav = event.values.clone();
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
mMag = event.values.clone();
}
if (SensorManager.getRotationMatrix(mRinn, null, mGrav, mMag)) {
SensorManager.remapCoordinateSystem(mRinn, SensorManager.AXIS_X, SensorManager.AXIS_Z, mRout);
SensorManager.getOrientation(mRout, mOrient);
//Logger.d("direction?: " + Math.toDegrees(mOrient[0]));
setOrientationText(Math.toDegrees(mOrient[0]));
}
}
我正在获取两个传感器(磁铁和加速器)的数据,然后创建 RotationMatrix(就像文档告诉我的那样)。如果是横向,我将 X -> X Axis 和 Y -> Z Axis 作为 RotationMatrix。
此 Activity 的 screenOrientation 也是横向的。
但是我真的不明白为什么我只有在摇动手机后才能得到正确的数据?!