RakutenAndroid 5.0.Mientras Lottie’s celebra su quinto… | Gabriel Peele | febrero de 2022


Mientras Lottie’s celebra su quinto aniversario, Lottie Android 5.0 está listo para su lanzamiento.Aparentemente, algunas funciones nuevas, pero en realidad algunas funciones de renderizado importantes, mejoras de rendimiento y correcciones de errores y la mayor registro de cambios hasta aquí.
Apoya a Lottie
Lottie Android se construye y mantiene completamente durante las noches y los fines de semana. Si usa Lottie en su aplicación, considere patrocinarnos.Para hacerlo, haga clic en el botón Patrocinar Esquina superior derecha del repositorio de GitHubLos enlaces a los patrocinadores de GitHub o Open Collective se pueden encontrar aquí.
Ambas plataformas están en línea. nuevas iniciativas Simplifique los pagos de las cuentas organizacionales/comerciales, lo que facilita que los equipos y las empresas patrocinen proyectos.
Muchísimas gracias airbnb, Archivos de lotería, base de monedasy Arroyo Gracias por su continuo patrocinio de Lottie.

Con estos, ¡comencemos a cambiar!
estabilizar
Lottie se utiliza en decenas de miles (¿o cientos?) de aplicaciones y se ha convertido en el estándar de la industria para ofrecer activos vectoriales y de animación de alta calidad en las aplicaciones. Por lo tanto, mantener la estabilidad y la compatibilidad con versiones anteriores es muy importante. En esta versión, pasé mucho tiempo evaluando y solucionando una gran cantidad de errores antiguos y solicitudes de funciones recibidas a través de GitHub. Al momento de escribir, solo hay 14 problemas abiertos y solicitudes de funciones con más de 32,000 estrellas de GitHub. En el pasado, traté de mantener los problemas abiertos por debajo de 1 por cada 1000 estrellas, pero solo obtuve 5.0.

esquinas redondeadas
Lottie ahora apoya esquinas redondeadas Para capas de formas y rectángulos.

Migrar desde tipos de capas de vista
Desde Lottie 1.0, Lottie vista.setLayerType() Abeja. En la ruta de aceleración de hardware, esto hace que Android asigne búferes de hardware dedicados para animaciones que deben cargarse en la GPU por separado.En el caso del software, LottieAnimationView dependerá de las partes internas de View. caché de dibujo Dibuja la vista en un mapa de bits y luego dibuja el mapa de bits en el lienzo original.
Esto causó algunos problemas:
- La distinción de hardware/software ocurre en el nivel de LottieAnimationView. Esto significa que los consumidores de LottieDrawable (por ejemplo, Lottie Compose) no pueden elegir un modo de representación.
- La memoria dedicada de Lottie es siempre distribuir. En el caso del software, sería un mapa de bits del mismo tamaño que LottieAnimationView, y en el caso del hardware, sería una capa de hardware dedicada.
En 5.0, Lottie ya no usa esta API. En la ruta acelerada por hardware, Lottie dibuja directamente en el lienzo original. En la ruta acelerada por software, gestiona internamente los mapas de bits dibujados directamente en el lienzo original. Esto proporciona varias ventajas clave:
- Reducir el consumo de memoria: En el caso del hardware, no se asigna memoria nueva. En el caso del software, Lottie creará un mapa de bits que es la intersección de los límites de Vista/Composición y el mapa de transformación del dibujo, lo que generalmente da como resultado un área de superficie más pequeña que todo el LottieAnimationView.
- Modo de renderizado: Lottie Compose y LottieDrawable ahora admiten la configuración de RenderMode.
- cache: Cuando se utiliza el renderizado por software, Lottie solo volverá a dibujar el mapa de bits cuando cambie la animación subyacente. Si no, simplemente vuelve a dibujar el mismo mapa de bits muy optimizado por Android.
- Corte: Lottie ahora puede renderizar fuera del rango de composición original (ver más abajo)
Debido a este cambio, no tiene que cambiar nada en su código. Está destinado a ser un detalle de implementación completamente interno que aporta los beneficios anteriores. Sin embargo, este cambio se combina con una serie de cambios en la forma en que las transiciones de lienzo se manejan internamente, por lo tanto, presente un problema si tiene algún problema.
Renderizado fuera de los límites de composición
Lottie para Android siempre recorta la animación en los límites de la composición establecidos en After Effects. Sin embargo, a veces desea que parte de la animación quede fuera de la composición. Por ejemplo, es posible que desee que el borde de la animación del corazón se ajuste bien alrededor de la forma principal del corazón para que se alinee con otros elementos de la interfaz de usuario en la pantalla, pero que desee tener un efecto de flash al cambiar de estado más allá de sus bordes.
Tanto Lottie Android como Lottie Compose ofrecen una nueva clipToCompositionBounds
API cuyo valor predeterminado es verdadero y se puede establecer en falso. Cuando se utiliza la representación de software, hay un pequeño costo de rendimiento para habilitar esta función. Lottie debe medir los límites de la animación para crear un mapa de bits del tamaño adecuado, luego asignar y dibujar un mapa de bits más grande. Esto debería funcionar en la mayoría de los casos, pero si deshabilita el recorte, se prefiere la aceleración de hardware.
Mover el manejo del ciclo de vida a LottieDrawable
LottieAnimationView siempre maneja su propio ciclo de vida. Se pausará y reanudará automáticamente si cambia la visibilidad de la vista o el estado adjunto de la ventana. Sin embargo, el ciclo de vida de la vista es una bestia complicada. API como onVisibilityAgregated Solo agregado en API 24, las sutilezas de RecyclerView causan errores de larga dataAdemás, los usos personalizados de LottieDrawable fuera de LottieAnimationView se ven obligados a obtener este comportamiento exactamente correcto, de lo contrario, podrían perder animadores y afectar la duración de la batería. Dado el uso generalizado de Lottie, es importante reevaluar esto.
En 5.0, toda esta lógica se trasladó a LottieDrawable a través de Drawable poner visible Una API a la que todas las vistas de la plataforma llaman automáticamente cuando corresponde.Esto alinea el estilo de Lottie con el del resto de la clase. animación dibujable Rendimiento.
Propiedades dinámicas de texto e imagen
propiedades dinámicas es una excelente manera de cambiar animaciones en tiempo de ejecución. Se pueden usar para aplicar colores temáticos, asociar el progreso con gestos o eventos, y más. Sin embargo, el texto y las imágenes tienen API separadas (TextDelegate e ImageAssetDelegate) porque su funcionalidad es anterior a la API de propiedades dinámicas completas.
Lottie 5.0 agrega soporte para texto e imágenes a la API de propiedades dinámicas existente, haciéndolos totalmente compatibles con Lottie Compose y más fáciles de aprender.
Quitar API setScale
Lottie tiene una API setScale que le permite acercar/alejar la animación directamente. Esta API se creó hace muchos años antes de que Lottie admitiera correctamente la API de extensiones de Android. Ahora que se ha mejorado la compatibilidad con las API de Android existentes, el comportamiento esperado de setScale es ambiguo.Como tal, esta API se eliminó y se recomienda usar tamaño con ImageView.ScaleTypeescribe escala de contenidoy escribe Alianza En su lugar está la API.