Serie de aplicaciones de podcasting de construcción de Android: 1. Mini reproductor integrado en la aplicación
Principio a escribir aquí … Actualmente estoy trabajando en un plan para reescribir una aplicación de podcast existente generada originalmente por xamarin en una aplicación de Android totalmente nativa. La característica más importante en cualquier aplicación de podcasting es el reproductor, especialmente el reproductor interiormente de la aplicación que debe tener las siguientes características:
- Visible en todas las pantallas
- Horizontes colapsados y expandidos
Aclaremos el segundo punto, el reproductor in-app debe tener dos modos: modo plegable, donde la apariencia del reproductor es pequeña y debe ubicarse debajo del contenido principal. El segundo modo es el modo extendido, donde la apariencia del tahúr debería instalarse toda la pantalla. Idealmente, cuando el tahúr cambia entre estos dos estados, debería favor una animación. Hablemos de la posibilidad al problema número 1.
Biblioteca de navegación
Si usamos la biblioteca de navegación y el modo de actividad única en AAC (Componentes de la construcción de Android), podemos mostrar fácilmente el reproductor en la aplicación en todas las pantallas al restringir el segmento del host de navegación por encima de la apariencia del reproductor en la aplicación. Cedido que el ámbito de navegación carga / descarga todas las vistas en el fragmento de host de navegación, podemos hacer que todas las vistas de la aplicación se extiendan al reproductor de la aplicación. Si el reproductor está oculto, todas las vistas lo atravesarán automáticamente; de lo contrario, pasarán directamente por encima del reproductor.
Un buen sorpresa secundario de usar el modo de actividad única es que el reproductor en sí se configurará desde una ubicación, la actividad principal, y combinado con el maniquí de apariencia, podemos implementar el reproductor sin violar el principio DRY. Ahora hablemos de implementar la segunda función.
Comportamiento de diseño
Desde la arribada del diseño del coordinador, Android se ha vuelto más flexible en la interacción entre animaciones y vistas. En este caso de uso particular, todo lo que tengo que hacer es escribir un diseño de restricción natural y agregarle una rasgo:
<androidx.constraintlayout.widget.ConstraintLayout
....
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
Esto es suficiente para tener una apariencia que se encuentra en la parte inferior de la pantalla, expande y anima la animación de estado de forma inmediata. Si me preguntas, sería ingenioso. Entonces, ¿cuál es el diseño final?
<CoordinatorLayout>
<MainContent/>
<InAppPlayer/>
</CoordinatorLayout>
Por supuesto, no hay carencia simple, ¿verdad? . Pero, ¿y si nuestra aplicación tiene pestañas y BottomNavigationView? Por supuesto, nuestro reproductor en la aplicación debe estar encima de BottomNavigationView, pero debajo del contenido principal. Una forma de resolver esta situación es utilizar un diseño restringido para colocar el contenido principal encima de la apariencia de la pestaña inferior.
Principio DRY y ViewModel
Cedido que el reproductor existe en varias pantallas (fragmentos), necesitamos un maniquí de apariencia para combinar todas las funciones del reproductor en una ubicación y solo reutilizar ese maniquí de apariencia en todas las vistas. ¿Qué mejor guisa que usar la clase AAC ViewModel? Podemos compartir fácilmente este maniquí de apariencia entre clips y sustentar siempre sincronizada la interfaz de afortunado del reproductor. PlayerViewModel puede obtener datos de la clase PodcastRepository, que realizará llamadas de red o leerá datos de la saco de datos específico.
Consulte este enlace de GitHub para obtener el código.
¡Estén atentos al próximo artículo de esta serie!