Мое первое Android приложение, Pizza Calculator
Началось все около 2 лет назад я прочитал на Пикабу вот этот пост, в котором расписано, что 2 пиццы по 30см диаметром меньше чем одна на 45см. Почитал комментарии и понял, что людям не хватает в этом вопросе ещё и сравнений веса и длины корочки, вот так у меня и появилось желание написать калькулятор, который все это мог бы посчитать.
На тот момент из опыта в каком-либо программировании у меня были только онлайн курсы по основам C# и пара написанных лаб.
На первую консольную версию приложения я потратил больше месяца, она умела сравнивать любое количество пицц по 4 показателям (площадь, длина корочки, отношение цены к площади и цены к весу), а также умела учитывать едите вы корочку или нет. Сравнение было упрощённым и сопостовляло результаты пиццы к предыдущей в списке (вторую сравниваем с первой, третью со второй и т.д.) Выглядело это вот так:
Спустя практически год я решил перенести свое творение на Android, сделать приложение с нормальным интерфейсом и полноценным сравнением пицц.
Если бы я начинал делать приложение сейчас, я бы отказался от идеи Xamarin + C# и выбрал бы Java. Полезной информации, гайдов и примеров готового кода для Java гораздо больше и новичку было бы проще, та и Android Studio в плане мобильной разработки удобнее чем Visual Studio.
Первым успехом было приложение с одной кнопкой, которое просто запускалось на моем телефоне. Добавив поля для ввода данных, я столкнулся с первыми серьезными трудностями, я не мог сделать отображение своих объектов (пицц) в списке ListView. Во многих гайдах было описано как отобразить уже заранее созданный список объектов, а для моей ситуации требовалось переписывать базовый адаптер.
Я на этом остановился и месяца три вообще не занимался приложением, пока не узнал что есть список RecyclerView и гайдов про него гораздо больше. Так я нашел блог одного индуса, который описывал как сделать адаптер для RecyclerView и списка List<T>. Мне потребовалось две недели чтобы адаптировать его пример кода под мои нужды: добавить больше информации про объект в списке и картинку. Я использовал CardView и мой список стал немного похож на фид новостей Google:
В фотошопе я нарисовал интерфейс, который хотел реализовать:
Проблемой на этом этапе стало адаптировать соотношение всех размеров интерфейса под разное разрешение и соотношение сторон экранов, было решено отказаться от горизонтальной ориентации приложения.
Проблему удалось решить с помощью ConstraintLayout, он позволял указывать размеры в % и закреплять соотношение сторон в нужных пропорциях. Сейчас приложение смотрит на ширину экрана и делает высоту одной карточки как 70% от этого значения, а все остальные элементы настроены уже на нужный процент от высоты или ширины карточки. Также использовался TextView, который изменял размер шрифта в зависимости от размера самого блока TextView, без этого на больших разрешениях экрана текст был очень мелким.
Для главного экрана также были реализованы плавающие кнопки "добавить", "сравнить" и колесо прогресса при загрузке второго экрана с графиками сравнения всех пицц.
Построить графики по нужным данным вроде бы просто, но как добавить к ним взаимодействия, чтобы сравнивать одну пиццу со всеми остальными, а не только 2 с 1 и т.д. Были найдены графики от Syncfusion (не реклама), которые умеют скролится в сторону и одновременно отображать таким образом любое количество нужных расчетов. Также они позволяют взаимодействовать с конкретным столбцом в графике, что после нескольких дней переписок с тех. поддержкой позволило реализовать текущий функционал, когда мы жмём на нужный столбец и эта пицца сравнивает себя со всеми остальными, но уже в процентах. Таким образом можно понять, что площадь пиццы больше, например, на 10%, а дороже она уже на 20%:
На этом глобальный функционал был окончен, я также добавил несколько мелочей: кастомный шрифт Google NotoSans, адаптивную иконку приложения, перевод на 6 языков (рус, укр, англ, болгарский, чешский и итальянский), спасибо моим друзьям за переводы.
Наступил самый волнительный момент, подготовка приложения и всех сопутствующих материалов к публикации в Play Market. Было заготовлено 5 скриншотов, с короткими подсказками функционала приложения, а также было написано подробное описание. Все это опять требовалось перевести на все необходимые языки и только потом добавлять.
И вот этот день настал, я отдал честно заработанные 25$ за регистрацию учётной записи разработчика для Google Play Console.
Я залил все скриншоты, описание и прочее и столкнулся с новыми проблемами. Требовалась целевая версия Android API 28 (Android Pie), а мое приложение собиралось для API 27. Ну ничего страшного подумал я и скачав нужное SDK пересобрал приложение. И снова ошибка, с 1 августа Google требует обязательное наличие 64 битной версии приложения, пол часа поиска и этот вопрос был решен. Потом Play Console попросила чтобы приложение было собрано как Android App Bundle, а моя Visual Studio 2017 этого не умела и я потратил ещё пол дня чтобы с этим разобраться.
Не смотря на все описанные трудности и два года времени от идеи до реализации приложения, оно наконец-то доступно для всех желающих в Play Market по ссылке. Приложение абсолютно бесплатное и не содержит рекламу.
Буду рад вашим отзывам и постараюсь ответить на все вопросы в комментариях. Если приложение хоть кому-то будет интересно, то сделаю вторую версию с расширенным функционалом и добавленным в базу меню пиццерий ближайших стран.
И напоследок несколько скриншотов:









Android Developers
96 постов2K подписчиков
Правила сообщества
Друзья!
Давайте адекватно относиться к тематике сообщества. Посты, не удовлетворяющие требованиям канала, будут отклоняться. Разработка под Android - это не только описание того, что надо сделать
(освоить Java / покормить кота / установить студию), но и реальные примеры того, что Вы описываете.