Android — создание серии приложений для подкастов: 1. мини-плеер в приложении

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

  • быть видимым на всех экранах
  • свернутый и развернутый вид

Давайте проясним второй момент: встроенный в приложение проигрыватель должен иметь два режима: свернутый режим, при котором область просмотра проигрывателя мала, и он должен располагаться ниже основного содержимого. Второй режим — это расширенный режим, в котором вид игрока должен занимать весь экран. В идеале должна быть анимация при переходе игрока между этими двумя состояниями. Поговорим о решении задачи №1.

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

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

С тех пор, как появился макет координатора, Android стал намного более гибким с точки зрения анимации и взаимодействия между представлениями. В этом конкретном случае использования все, что мне нужно было сделать, это написать обычный макет ограничения и добавить к нему одну строку:

<androidx.constraintlayout.widget.ConstraintLayout
....
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">

Этого было достаточно, чтобы иметь вид, который может располагаться внизу экрана, расширяться и анимировать эти изменения состояния из коробки. Довольно круто, если вы спросите меня. Итак, как выглядит окончательный макет?

<CoordinatorLayout>
   <MainContent/>
   <InAppPlayer/>
</CoordinatorLayout>

Конечно, все не так просто, не так ли? 😃. Но что, если в нашем приложении есть вкладки и BottomNavigationView? Наш встроенный в приложение проигрыватель, конечно же, должен располагаться над BottomNavigationView, но ниже основного контента. Одним из решений этого пограничного случая является размещение основного содержимого над представлением нижних вкладок с использованием макета ограничения.

Принцип DRY и ViewModel

Поскольку проигрыватель существует на нескольких экранах (фрагментах), нам нужна модель представления, чтобы сгруппировать все функции проигрывателя в одном месте и просто повторно использовать модель представления во всех представлениях. Какой лучший способ реализовать это, чем использовать класс AAC ViewModel. Мы можем легко разделить эту модель представления между фрагментами и постоянно синхронизировать пользовательский интерфейс игрока. PlayerViewModel может получать данные из класса PodcastRepository, который будет выполнять сетевые вызовы или читать из локальной базы данных.

Пожалуйста, обратитесь к этому Ссылка на GitHub для кода.

Ждите следующей статьи из этой серии!

Похожие записи

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

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