Приложение «Компас»

Концепция приложения: Определение положения по сторонам света.

Материалы к проекту:

Настройка приложения

Приложение будет довольно минималистичным, поэтому настроек немного:

  • Название приложения — Компас.

Для работы приложения понадобится картинка, указывающая на стороны света. Например, такая:

Можно взять любую другую, главное, чтобы были правильно расположены стороны света. Если вы планируете цветной фон всего приложения, то лучше, чтобы у картинки не было своего фона (т.е. фон был прозрачный). Эту же картинку можно использовать в качестве иконки приложения.

Дизайн-макет

Внешний вид приложения:

Компоненты:

Настроим Экран.

  • Выравнивание по горизонтали и вертикали — Центр Центр.
  • Ориентация экрана — Альбомный режим (т.е. вертикально).
  • Отключаем показ статус-бара и заголовка.

Добавим Надпись. Она будет выводить букву направления, в какую сторону направлен телефон. Надпись должна быть заметка, поэтому сделаем её покрупнее.

  • Жирный шрифт,
  • Размер — 20,
  • Текст — «С» (чтобы не оставлять поле пустым, предварительно заполним буквой, обозначающей Север),
  • Остальные настройки — по желанию.

Добавим Холст. Здесь у нас будет вращаться сам компас. Настроим его.

  • Высота — наполнить родительский.
  • Ширина — наполнить родительский.

На холст добавим Изображение спрайта. Это будет сам компас. Его настройки:

  • Высота — 200 пикселей,
  • Ширина — 200 пикселей.
  • Изображение — загруженная картинка компаса.
  • Переместите спрайт так, чтобы он был посередине холста, координаты x и y подставятся автоматически. В режиме программирования мы еще выставим координаты в зависимости от размеров экрана, но в дизайнере также лучше поставить по центру макета, чтобы потом не запутаться.
  • Важно установить центр спрайта, чтобы он мог корректно вращаться. Для этого нужно кликнуть на «Mark Origin» в настройках компонента, выбрать центр и нажать Ок.

При этом в настройках появятся координаты центра (зависят от параметров вашего изображения).

Обзор всех настроек спрайта:

И наконец добавим Сенсор Ориентации. Это невидимый компонент, и у него нет никаких предварительных настроек, кроме включения/отключения.

Дизайн готов. Можно переходить к программированию.

Программирование

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

Ширина и высота спрайта будет ровно в половину от размеров экрана, но спрайт сохранит пропорции, т.к. это заложено в настройках. Координаты центра экрана вычисляются также — половина от размерностей экрана.

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

Азимут — это угол между направлением на север и направлением на интересующий объект, отсчитываемый по часовой стрелке в горизонтальной плоскости. Измеряется в градусах от 0° до 360°. 

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

  • Север — 0°,
  • Северо-Восток — 45°,
  • Восток — 90°,
  • Юго-Восток — 135°,
  • Юг — 180°,
  • Юго-Запад — 225°,
  • Запад — 270°,
  • Северо-Запад — 315°.

Но вряд ли телефон будет получать эти точные значения, они могут отличаться от четкого направления на несколько градусов. т.е. при строгом направлении на Север азимут может быть равен и 0°, и 355°, и 5°. Поэтому нужно разбить круг по секторам.

К примеру, Север будет определяться в пределах от 337° до 22° — это 45-градусный сектор круга. Когда значение азимута попадет в данный интервал, приложение должно нам показать букву стороны света. Для этого будем использовать условие Если:

Обратите внимание на логический оператор: здесь используется ИЛИ, так как невозможно, чтобы азимут был одновременно больше 337 и меньше 22. Аналогично нужно сделать для всех остальных сторон горизонта, но здесь уже использовать оператор И, т.к. должен быть именно промежуток.

  • Северо-Восток — от 22° до 67°
  • Восток — от 67° до 112°
  • Юго-Восток -от 112° до 157°
  • Юг — от 157° до 202°
  • Юго-Запад — от 202° до 247°
  • Запад — от 247° до 292°
  • Северо-Запад — от 292° до 337°

В итоге у нас должен получится вот такой блок:

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

Во избежание ошибок работы приложения, при использовании держите его горизонтально.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

Срок проверки reCAPTCHA истек. Перезагрузите страницу.