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

Хотелось бы начать эту статью хоть с какого-то приветствия, но так как мы собрались тут ради хоть как-то полезной информации, перейду сразу к делу. Итак, немного вводных и постановка проблемы: любому начинающему разработчику нужен опыт. А как наработать опыт? Именно опыт, а не просто определённый объём зазубренной теории с полным нулём практики. Есесна написать что-то своё — проект, который не стыдно и в портфолио положить, да и просто перед знакомыми похвастаться.

А для чего нужна эта статья? Прежде всего показать, что ничего такого страшного (и уж тем более сложного) в том, чтобы попробовать написать что-то своё нет и быть не может. Ну и поделиться опытом, проблемами, которые у меня возникли, да и просто вызвать хоть какой-то отклик у более опытных товарищей.

План прост: написать приложение, которое помогает отслеживать количество каких-либо базовых упражнений. Возьмём, к примеру, следующие: отжимания, приседания и стояние в планке. Почему именно такие упражнения? Всё просто: для них любому человеку потребуются лишь руки, ноги и, по возможности, чистый пол (не обязательно, но эстетического удовольствия для).

А что получилось в итоге, вы сможете посмотреть в конце. Ссылочку на репозиторий я оставлю.

Итак, от слов — к делу. Часть 1: подготовка

Глупо было бы начинать, не имея какого-либо плана действий. Как минимум, я должен чётко знать, что я хочу создать. Идея приложения, которое может помочь отслеживать количество сделанных упражнений, вряд ли является сверхновой, потому что разного рода трекеров достаточно, но как собственный проект для длительного ковыряния вполне.

Буквально в пути был создан примерный дизайн приложения (ну и по мелочи, типа виджетов. Так, на будущее), который вы можете узреть ниже:

(Как видите, особыми художественными навыками я не отличаюсь, да, но на будущее всё же возьму себе на заметку подкорректировать дизайн)

(Как видите, особыми художественными навыками я не отличаюсь, да, но на будущее всё же возьму себе на заметку подкорректировать дизайн)

А что по функциональному наполнению? Календарь, отображение текущей даты, прогресс-бар по упражнениям, с возможностью добавлять своё, и простенькое (пускай даже пока не особо функционирующее), но меню. В дальнейшем также планирую добавить отслеживание прогресса, изменение ежедневных целей, возможность смены темы приложения с светлой на тёмную, ну и хоть какую-нибудь, но всё же геймификацию рутинного процесса: достижения за непрерывность, наличие соревновательного режима между пользователями и т. д. (да, ехидная зелёная сова-манипулятор тихонько наблюдает из-за угла).

Итак, план есть, практики нет. Пора это исправить.

Часть 2: создание основы основ приложения

Прежде всего, переходя к практике, я начал с выбора среды разработки. Мои попытки что-то сделать в IntellIj IDEA (фух, вроде правильно написал, но не суть. Не кидайтесь камнями, в случае чего) пресеклись некоторыми причинами (в том числе и меньшим удобством), в связи с чем было решено перейти в знакомый всем хоть сколько-то сведущим в мобильной разработке Android Studio. А там и макет удобный, и работать приятнее…

В общем, к сути. Да, я мог бы расписывать каждую кнопочку, которую я добавлял, но кому это может быть интересно? Поэтому кратко постараюсь пробежаться по всем «штукам», которые я смог попробовать добавить в своё приложение.

Что же, начнём. Тема приложения. Если и стоит с чего-то начинать создание, то это вряд ли с выбора темы. При попытке создать кривыми путями тёмную тему, я столкнулся с некоторыми проблемами, о чём позже.

ef593d126d8853ba92c78c71f46dd13a.jpg

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

Тот самый вывод даты, который и сливался с фоном

Тот самый вывод даты, который и сливался с фоном

В итоге проблема была решена заменой цвета фона (да, моя «тёмная тема» была сделана именно таким кривым способом). И был добавлен календарь, вот:

2f723a82ec03c3b9d8c53fc524d1175c.jpg

Ну и то, что оказалось самым интересным в реализации, и что получилось самым «вырвиглазным», так это progressbar-ы, которые хоть и адекватно функционируют в рамках своих обязанностей, но визуально это выглядит не самым лучшим образом (+ пункт в копилку будущих исправлений)

Собственно, два progress bar-a (по одному на каждое упражнение), и кнопки, через которые можно добавить совершённое количество упражнений. Ну а как это в итоге выглядит, можно увидеть далее

Собственно, два progress bar-a (по одному на каждое упражнение), и кнопки, через которые можно добавить совершённое количество упражнений. Ну, а как это в итоге выглядит, можно увидеть далее

Часть 3: реальные тесты

Пришла пора собрать проект и протестировать на реальном устройстве, а не на виртуальной машине. Предварительно протестировав непосредственно на «виртуально-реальной» машине (т. е. просто подключив свой телефон) и исправив кое-какие моменты (в частности, просто изменив формат выведения даты, ибо первоначальный способ просто не работал), я скомпилировал это всё в апк-файл, готовый для распространения.

Вот как это выглядит на данный момент на моём устройстве.

Вот как это выглядит на данный момент на моём устройстве.

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

К слову, с плодами моих трудов вы можете ознакомиться здесь: https://github.com/AlexUnderTheLulz/MyEverydayActivity

В общем, буду рад любому фидбеку (адекватному — опционально)

© Habrahabr.ru