Как определить поворот экрана - PullRequest
15 голосов
/ 30 января 2011

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

Когда я поворачиваю экран (по крайней мере на моем Nexus S), вызывается onCreate действия, например, когда я поворачиваюсь от портретав ландшафтный режим.Когда я поворачиваюсь из одного ландшафтного режима в другой с поднятым верхним краем, onCreate() вызывается дважды (один раз для портретной ориентации и один раз для целевого ландшафтного режима).

Однако, когда я вращаюсь с нижнимвверх, экран поворачивается на 180 °, и onCreate не вызывается.Есть ли событие, которое запускается в этом случае?

Ответы [ 5 ]

11 голосов
/ 30 января 2011

Вы правы, что при повороте на 180 градусов вы не будете перезапущены или не получите изменение конфигурации, потому что конфигурация фактически не изменилась.(Это все еще в альбомной или портретной ориентации, а все остальное - то же самое.)

Однако, если вы показываете компас, это должно означать, что вы обновляете его из событий датчика.Таким образом, вы можете просто вызывать Display.getRotation () каждый раз, когда вы получаете обновление датчика, чтобы получить текущее вращение экрана.Фактически, вам нужно - это вращение интерпретирующих сенсорных событий (или, собственно, как их рисунок будет изменен при попадании на экран), а не только ориентация.

Я нашелсоответствующее сообщение в блоге, которое стоит прочитать .

Обязательно прочитайте документацию SDK .

Также ознакомьтесь с обсуждение об использовании Display.getRotation () для правильного переназначения координат датчика.

6 голосов
/ 02 июля 2012

Вспомогательный класс OrientationEventListener позволяет очень легко получать обратные вызовы при вращении.Я бы посоветовал вам попробовать.

0 голосов
/ 27 мая 2013

Как сказал Monchote, чтобы заставить стрелку вращаться, как и ожидалось, на компасе, лучше привязать пользовательский интерфейс к книжному или горизонтальному и изменить угол иглы в соответствии с углом поворота устройства, можно легко получить из OrientationListener .

Таким образом, независимо от того, открыта ли функция автоматического поворота пользователем или нет, вы всегда можете получить уведомление об изменении угла поворота. Вот хороший пример для вашей справки.

0 голосов
/ 30 января 2011

Посмотрите на метод OnConfigurationChanged , чтобы отследить изменение ориентации и перестроить ваш пользовательский интерфейс при необходимости.

См. пример кода

0 голосов
/ 30 января 2011

Просто взгляните на документацию SensorManager , там вы можете найти лучшие примеры и объяснения того, как использовать акселерометр для получения наиболее точной информации. Вместо того, чтобы делать вещи, просто определяя ориентацию телефона, с этим API вы можете получить точное вращение, как в гоночных играх, таких как Asphalt и Need For Speed.

...