Android中的传感器坐标系不会改变,是吗?

时间:2012-02-15 12:15:36

标签: android android-sensors tilt-sensor

我在许多地方读过:One Screen Deserves Another:“API用于设备自然方向的传感器坐标系统不随设备移动而改变,与OpenGL坐标系统相同。“

现在,我得到与此图像相同的读数:enter image description here

我不明白的是:如果我旋转手机时坐标系没有改变(屏幕面向用户的屏幕总是如此),应该在Y轴上施加重力永远。它应该只改变轴,如果我将手机放在屏幕不再面向用户的位置,就像放在桌子上一样,重力应该应用在Z轴上。

我的理解有什么问题?

谢谢!吉列尔莫。

2 个答案:

答案 0 :(得分:2)

当设备的屏幕方向改变时,交换轴。根据你引用的文章:

  

然而,Android传感器API将传感器坐标空间定义为相对于设备的顶部和侧面 - 而不是短边和长边。当系统重新定位屏幕以响应侧向握住手机时,传感器坐标系不再与屏幕的坐标系对齐,并且您的应用程序显示中会出现意外的旋转。

要根据需要访问未交换的值,请在值[]中使用索引3,4和5,否则同一篇文章中提到的一些建议可以很好地工作!

答案 1 :(得分:0)

很老的问题,但我发现它仍然有意义。截止到今天,Sensor Overview页面的传感器坐标系章中仍然显示:

了解此坐标系最重要的一点是,当设备的屏幕方向发生变化时,轴不会交换-也就是说,传感器的坐标系永远不会随着设备的移动而变化。此行为与OpenGL坐标系的行为相同。

对我来说,这种措词仍然令人困惑,当然这可能是因为我不是英语为母语的人。

我的理解是,在Android中(与iOS中一样),传感器假定的坐标系与设备集成。即,坐标系卡在设备上,其轴随设备旋转。

因此,对于自然方向为纵向的手机,当将其垂直竖立在用户面前时,Y轴指向上方。参见下图,来自同一Android guide

enter image description here

然后,当用户将手机旋转到横向左方向时(因此使用主页按钮在右侧),Y轴指向左侧。从Matlab tutorial看下面的图片(尽管屏幕不再是用户真正面对的地方):

enter image description here

然后有来自Android开发者博客One Screen Turn Deserves Another的经常被引用的帖子,内容为:

API用于设备自然方向的传感器坐标系不会随设备移动而变化,并且与OpenGL坐标系相同

在我看来,这与我先前的推理完全相反。但话又说回来,在接下来的问题何在?一章中,您的确看到,当手机向左旋转时,如我先前的推理一样,Y轴指向左侧。