Как создавался BookingApp для Android

До недавнего времени мне приходилось заниматься разработкой только веб-приложений на Java и лишь в конце апреля я впервые познакомился с операционной системой Android. Мне предложили заняться разработкой приложения для бронирования отелей BookingApp для конкурса от HTC — HTC Android Developers Contest.

Мы решили, что разработка Android приложения для конкурса это отличная возможность не только рассказать о себе, но и сделать свой собственный продукт для Android, который потом в Stanfy сможем развивать дальше. Один из наших проектов для iPhone как раз в то время находился в разработке и мы решили сделать для него Android версию.

В результате, через полтора месяца работы появилось приложение BookingApp для Android и iPhone.

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

Осознавая, что работы предстоит немало я потихоньку погружался в теорию. По мере ознакомления с теоретическими основами и техническими аспектами разработки я узнал о многих отличительных особенностях платформы. Приятной новостью стало  также то, что процесс написания кода может осуществляться на языке Java с помощью плагина, встраиваимого в среду разработки Eclipse — вещи, с которыми давно работал и которые хорошо знакомы.

Процесс

После установки всех необходимых компонентов я приступил к созданию традиционного для всех начинающих приложения «Hello world», при этом ознакомился со структурой типичного android-проекта в среде Ecliplse. Обрадовал также тот факт, что для компиляции и сборки готового приложения не требуется никаких вспомогательных утилит — среда разработки делает это автоматически. Запускать и производить отладку готовых приложений можно как и на реальных устройствах, так и на встроенном эмуляторе, процесс настройки которых легкий и сравнительно недолгий. Для вывода вспомогательных сообщений из программы существует специальная консоль.

После ознакомления со всем этим пришло время взяться за реальное приложение. Поскольку для меня это был процесс долгим и трудоемким, я не буду описывать его целиком со всеми скитаниями в поисках истины, а остановлюсь лишь на некоторых деталях.

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

Меню

Удобным показалось создания меню приложения. Структуру меню (порядок следования элементов, подписи и изображения) я задал в отдельном .xml файле, а инициализацию и логику работы всех возможных элементов описал  в своем базовом классе c помощью переопределения методов onCreateOptionsMenu() и onOptionsItemSelected().

Далее, наследуясь от этого базового класса и вновь переопределяя метод onOptionsItemSelected(), я изменял структуру и логику меню в зависимости от требований с помощью удаления базовых либо добавления  новых элементов. Элементы интерфейса в каждый вид можно добавлять программно, а можно при помощи тегов с соответствующими параметрами в специальном .xml файле. Это позволяет отделить основную логику приложения от логики построения интерфейса.

Графика

При создании собственного стиля для элементов очень полезной стала т.н. графика NinePatch. Она позволяет создавать базовые графические элементы, которые впоследствии можно растягивать до нужных размеров не затрагивая углы и границы, что очень удобно при создании фона для кнопок и панелей. Для каждого состояния пользовательского элемента (нажатие, выделение) при помощи xml селектора можно задать специфический фон. Также можно делать фоновое изображение элементов на основе небольшого фрагмента – для этого создается xml-файл с компонентом bitmap, которому задаются соответствующие атрибуты. В дальнейшем имя этого файла используется в значении параметра при указании фона для нужного компонента.

При попытке создания колеса прокрутки (которые обычно выводятся пользователю параллельно с длительной загрузкой чего-либо) немного удивил тот факт, что анимированные (в браузерах) gif-ы, почему-то, неподвижно отображались в Android’е. После долгих поисков я пришел к тому, что для этого существует элемент ProgressBar, которому с помощью опять таки xml-файла задаются параметры – форма, цвет, градиент и размер.

Карта

Для программного доступа к дополнительным возможностям устройства (Интернет, карта, GPS, телефонные звонки) нужно указать соответствующие разрешения в основном файле проекта.

Что касается использования API для Google-карт, то для этого еще необходимо получить на сайте специальный ключ. Базовый класс здесь – MapView, который удобен тем, что с его помощью можно сравнительно легко выполнить на карте множество интересных и полезных операций. Некоторое время пришлось потратить на изучение того, каким образом можно добавить на карту в конкретные точки какие-либо свои значки и обозначения. Оказалось, это очень легко делается с помощью создания потомка класса ItemizedOverlay – слоя, который впоследствии накладывается на карту. Добавлять на карту стандартные элементы интерфейса можно с помощью метода addView() класса MapView, указав все необходимые параметры.

Звонки

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

Галерея

Также хочется сказать несколько слов о создании галереи для просмотра фотографий. Стандартный элемент Gallery не очень подходил для этой цели, поскольку не позволял «перелистывать» фотографии по одной, а при сильном движении палецем по экрану мгновенно перелистывал все от начала до конца. Пришлось пойти на небольшую хитрость – переопределить метод onFlight() стандартного элемента, добавив в него логику определения направления движения прокрутки и ручной установки соответствующей позиции. Ну, собственно по деталям все J.

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

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

Пока нет комментариев.

Оставить комментарий