gpt4 book ai didi

android - 重新映射传感器坐标

转载 作者:行者123 更新时间:2023-11-29 14:53:59 28 4
gpt4 key购买 nike

我想要发生的事情是,当手机偏离其“自然”方向时重新映射坐标系。因此,当使用横向手机时,它应该读取相同的值,就好像它是纵向持有的一样。

我正在检查旋转是否等于 Surface.ROTATION_90,如果是,则重新映射坐标系。

我承认我不太明白如何正确地做到这一点,需要一些指导。

所以,你需要运行这两个方法:

SensorManager.getRotationMatrix(inR, I, grav, mag); 
SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_Y,SensorManager.AXIS_MINUS_X, outR);

传递给这些方法需要什么?我创建了一个新的 float 组,然后只将方向传感器数据传递给磁力场,但没有用。所以,我注册了加速度计和磁场传感器。将这两者的数据提供给 getRotatioMatrix 方法,我总是得到一个 NullPointerException(即使 JavaDoc 说某些参数可以为 null)。我什至尝试将数据传递给每个参数,但仍然得到一个 NullPointerException

我的问题是,我需要传递给 getRotationMatrix 方法的正确数据是什么?

最佳答案

我发现实现此目的的一种非常简单的方法是 SDK 示例 AccelerometerPlay 中使用的方法。

首先你得到这样的显示,例如在 onResume() 中:

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mDisplay = windowManager.getDefaultDisplay();

然后在 onSensorChanged() 中你可以使用这个简单的代码:

@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;

switch (mDisplay.getRotation()) {
case Surface.ROTATION_0:
mSensorX = event.values[0];
mSensorY = event.values[1];
break;
case Surface.ROTATION_90:
mSensorX = -event.values[1];
mSensorY = event.values[0];
break;
case Surface.ROTATION_180:
mSensorX = -event.values[0];
mSensorY = -event.values[1];
break;
case Surface.ROTATION_270:
mSensorX = event.values[1];
mSensorY = -event.values[0];
break;
}
}

希望这会有所帮助。

关于android - 重新映射传感器坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10918948/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com