Разработка приложение "Дневник тренировок"

Здравствуй.

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

- приятная взгляду;

- нативная;

- бесплатная;

- без рекламы;

- большой каталог упражнений;

- возможность бекапа/восстановления;

- (не обязательно) возможно отправки тренировки другу.


С языка программирования (особенно ООП) я на Вы. Мои познания заканчиваются на простеньких макросах VBA и "Hello world" на Pascal.


Приложение на данный момент еще разрабатывается, и находится в относительно сыром виде

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

Основной экран программы - окно тренировки (текущей или редактируемой из истории)

Левое меню (SlidingMenu) - это история. Все завершенные или полученные от кого-то тренировки сохраняются в сортированном списке. Меню создано при помощи шикарной библиотеки FlipShare.

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

Порядок отображения следующий:

1. Закрепленные (избранные)

2. Полученные от другого пользователя

3. Тренировки которые применялись для повтора

4. Отредактированные

5. Тренировки ранее бывшие закрепленными

6. Новые

В каждой из групп сортировка по дате.

Для каждой записи в истории доступно меню с набором соответствующих функций:

- повторить;

- закрепить/открепить;

- просмотреть;

- редактировать;

- отправить;

- удалить.

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

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

А так же функцию регистрации/входа на сайт (в планах) для просмотра статистики (уже более-менее сформирована идея что именно и в каком виде будет там отображаться) и информация об используемых библиотеках (программка увидела мир во многом благодаря разработчикам различных красивых и удобных библиотек, я посчитал что просто обязан разместить информацию о них в своей программе, независимо от того, сколько человек ее увидит)

Основная информация, отображаемая о текущей тренировке это:

1. Название упражнения.

2. Тип упражнения.

3. Общее кол-во подходов в упражнении (не повторений)

4. Общий вес.

В данный момент есть сомнения в полезности некоторой информации из этого списка.

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

Подходы в упражнении можно как отредактировать

Так и удалить.

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

Библиотека ColorDialog.

Верхняя часть экрана тренировки содержит таймер отдыха автоматически запускаемый при добавлении нового подхода. Часики отображаются с помощью библиотеки BetterPickers.

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

При нажатии на таймер отображается окно выбора времени отдыха. Тут я использовал обычные часы, но вместо "ЧЧ:ММ" беру значения как "ММ:СС".

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

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

По нажатию на маленькую иконку группы мышц открывается список упражнений с описанием (в разработке) и картинками. Библиотека ExpandingCollection. Хоть и выглядит красиво, но работает с лагами, что меня дико бесит.

Просмотр тренировки решил шутки ради сделать в стиле Fallout.

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

Библиотеки Gradientlayout и Markwon.

БД для истории - SQLite. Создал 3 основных таблицы: подходы, упражнений, тренировки. А так же справочная таблица статусов тренировок (полученная, закрепленная,..)

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

Для таблиц создал триггеры обновляющие информацию по общему кол-ву подходов в упражнениях и общему весу в них же.

БД каталога упражнений содержит в себе 7 таблц. 2 из них - то таблицы упражнений и мышечных группы, 1 таблица ссылок в картинкам в папке assets. Таблица типов упражнений:

- базовое;

- изолирующее;

- формирующее.

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

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

Одно из самых интересных решений, которые я применил в своем "проекте", и которым хотел бы с вами поделиться (вероятнее всего для многих оно покажется обыденным, но тем не менее я такого примера в интернете, при беглом поиске, не нашел) - это запрос разрешения (для приложения) пользователю в том же контексте, в котором он совершает действие. Пример из моей программы - я хочу отправить тренировку другу, для этого мне нужно сформировать файл на устройстве. Как сделать так, что бы при первичном запуске программы она не просила никаких разрешений, но при нажатии соответствующей кнопки спрашивала о них и при получении положительного результата продолжала выполнять функцию, которую выбрал пользователь. Цепочка - нажал "отправить" - запросило полномочия - отправило. Я это реализовал в связке библиотек MaterialDialogs и Dexter через EventBus. Пользователь нажимает "Отправить", программа проверяет полномочия, если их нет - выдает запрос, и регистрируется на получение уведомлений через EventBus, если пользователь дает полномочия - отправляем соответствующее уведомление и получатель выполняет функцию, которая для этого уведомления предназначена.

Структура проекта, кому интересно:

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

В приложении две активности. Одна для обработки Intent фильтра и получения тренировки (пока что никаких проверок, что именно я получил, не делается. Все сразу пытаюсь преобразовать в строковую переменную и заполнить из нее тренировку). Вторая - основная.

Тренировка, каталог, просмотр тренировки - все это фрагменты отображаемые в контейнере layout основной активности. В activity_main.xml создано 3 FrameLayout. Правила отображения для них свои:

- для текущей тренировки отображаются все 3;

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

- для каталога и просмотра тренировки скрываются верхний и нижний контейнеры.


Алгоритм по которому становится известно, кто сейчас в центральном контейнере работает с помощью EventBus. Основная активность замещает фрагмент, в методе onCreateView() фрагмента выдаю уведомление FragmentIsShowed, а в основной активности отрабатываю его. Выглядит примерно так:

Разработка приложение "Дневник тренировок" Приложение на Android, Android разработка, Тренировка, Тренажерный зал, Длиннопост

Из не реализованных функций - "будильник" при окончании времени отдыха. Добавление упражнений в каталог. Сайт с просмотром прогресса (планирую отображать прогресс двумя графиками по всем упражнениям в силовых показателях и выносливости, так как многие спортсмены любят утверждать, дескать 12 раз это на силу, а 13 это уже на выносливость... Что-то ведь надо отображать :) ). Ну и так - по мелочи.


Ну вот, собственно и все.

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

Android Developers

86 постов2K подписчиков

Добавить пост

Правила сообщества

Друзья!


Давайте адекватно относиться к тематике сообщества. Посты, не удовлетворяющие требованиям канала, будут отклоняться. Разработка под Android - это не только описание того, что надо сделать

(освоить Java / покормить кота / установить студию), но и реальные примеры того, что Вы описываете.

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

Прикольное приложение только не понял зачем библиотека для часов если в сдк такие же часы для версий  > 5

раскрыть ветку (1)
Автор поста оценил этот комментарий
Для меня легче возможность кастомизации, а я фанат все покрутить и понастраивать под себя. Еще нахожусь в поиске идеального внешнего вида всех отдельных модулей, часов в том числе.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку