Подтвердить что ты не робот

Как определить поворот экрана

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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