Система координат датчика в Android не меняется, не так ли?

Я читал во многих местах, например: Один экран заслуживает другого что: «Система координат датчика, используемая API для естественной ориентации устройства, не меняется при перемещении устройства и совпадает с системой координат OpenGL».

Теперь я получаю то же чтение, что и на этом изображении: введите здесь описание изображения

Чего я не понимаю: если система координат не меняется, если я поворачиваю телефон (всегда экраном, обращенным к пользователю), сила тяжести должна всегда прикладываться к оси Y. Он должен изменить ось только в том случае, если я помещу телефон в положение, когда экран больше не обращен к пользователю, например, на столе, где гравитация должна применяться к оси Z.

Что не так с моим пониманием?

Спасибо! Гильермо.


person polonskyg    schedule 15.02.2012    source источник


Ответы (2)


Оси меняются местами при изменении ориентации экрана устройства. Согласно статье, которую вы цитировали:

Однако API-интерфейсы датчиков Android определяют пространство координат датчика относительно верхней и боковой части устройства, а не короткой и длинной сторон. Когда система меняет ориентацию экрана в ответ на то, что вы держите телефон сбоку, система координат датчика больше не совпадает с системой координат экрана, и вы получаете неожиданные повороты на дисплее вашего приложения.

Чтобы получить доступ к значениям без замены, если хотите, используйте индексы 3, 4 и 5 в values[], в противном случае некоторые из предложений, упомянутых в той же статье, работают довольно хорошо!

person Amru E.    schedule 15.07.2013

Довольно старый вопрос, но я считаю его все еще актуальным. На сегодняшний день страница обзор датчиков в В главе Сенсорная система координат по-прежнему говорится:

Наиболее важным моментом, который нужно понять об этой системе координат, является то, что оси не меняются местами при изменении ориентации экрана устройства, т. е. система координат датчика никогда не меняется при перемещении устройства. Это поведение такое же, как поведение системы координат OpenGL.

Меня эта формулировка все еще сбивает с толку, конечно, это может быть потому, что я не являюсь носителем английского языка.

Насколько я понимаю, в Android (как и в iOS) система координат, принимаемая датчиками, интегрирована с устройством. То есть система координат привязана к устройству и ее оси вращаются вместе с устройством.

Таким образом, для телефона с портретной естественной ориентацией ось Y направлена ​​вверх, когда телефон держится вертикально в портретной ориентации перед пользователем. См. изображение ниже из того же руководства по Android:

введите здесь описание изображения

Затем, когда пользователь поворачивает телефон в альбомную левую ориентацию (то есть с кнопкой «Домой» справа), ось Y указывает налево. См. изображение ниже из учебника по Matlab. (хотя экран больше не обращен к пользователю):

введите здесь описание изображения

Также есть часто цитируемый пост из блога разработчиков Android, Один поворот экрана заслуживает другого, в котором говорится:

Система координат датчика, используемая API для естественной ориентации устройства, не меняется при перемещении устройства и совпадает с системой координат OpenGL.

что для меня звучит прямо противоположно моему предыдущему рассуждению. Но опять же, в следующей главе Итак, в чем проблема? вы видите, что когда телефон поворачивается в альбомную лево, ось Y указывает налево, как и в моем предыдущем рассуждении.

person superjos    schedule 18.05.2020