Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Animación de Compose

Crea animaciones en sus aplicaciones de Jetpack Compose para enriquecer la experiencia del usuario.
Actualización más reciente Versión estable actual Próxima versión potencial Versión beta Versión Alfa
16 de septiembre de 2020 - - - 1.0.0-alpha03

Estructura

Compose es una combinación de 7 ID de grupo de Maven en androidx. Cada grupo contiene un subconjunto de funcionalidades objetivo, cada uno con su propio conjunto de notas de la versión.

En esta tabla, se explican los grupos y vínculos correspondiente a cada conjunto de notas de la versión.

GrupoDescripción
composeDefine tu IU de manera programática con funciones que admiten composición que describan su forma y sus dependencias de datos.
compose.animationCrea animaciones en sus aplicaciones de Jetpack Compose para enriquecer la experiencia del usuario.
compose.foundationEscribe aplicaciones de Jetpack Compose con componentes fundamentales listos para usar y extiende la base para compilar tus propias piezas de sistema de diseño.
compose.materialCompila las IU de Jetpack Compose con componentes de Material Design listos para usar. Este es el punto de entrada de nivel superior de Compose, diseñado para proporcionar componentes que coincidan con los descritos en www.material.io.
compose.runtimeSon los componentes básicos del modelo de programación de Compose y la administración de estados, y el entorno de ejecución principal para el cual se orienta el complemento de compilación de Compose.
compose.uiSon los componentes fundamentales de la IU de Compose necesarios para interactuar con el dispositivo, incluidos el diseño, el dibujo y la entrada.
uiFunciona con la biblioteca de Jetpack Compose.

Cómo declarar dependencias

Para agregar una dependencia en Compose, debes agregar el repositorio Maven de Google a tu proyecto. Consulta el repositorio Maven de Google para obtener más información.

Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:

dependencies {
    implementation "androidx.compose.animation:animation:1.0.0-alpha07"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.0"
        kotlinCompilerExtensionVersion "1.0.0-alpha07"
    }
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs += ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"]
    }
}

Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes en esta biblioteca antes de crear uno nuevo. Para agregar tu voto a un error existente, haz clic en el botón de la estrella.

Crea un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 1.0.0

Versión 1.0.0-alpha03

16 de septiembre de 2020

Lanzamiento de androidx.compose.animation:animation:1.0.0-alpha03 y androidx.compose.animation:animation-core:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.

Correcciones de errores

  • Se cambiaron de manera coherente los nombres de los usos de gravity a align o alignment en las API de diseño. (I2421a, b/164077038)

Versión 1.0.0-alpha02

2 de septiembre de 2020

Lanzamiento de androidx.compose.animation:animation:1.0.0-alpha02 y androidx.compose.animation:animation-core:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregó ManualFrameClock.hasAwaiters para ver si hay algo que espera un marco de ese reloj; runWithManualClock como un reemplazo para runBlocking cuando se ejecutan pruebas que necesitan un ManualFrameClock, y TestUiDispatcher.Main, que brinda un acceso fácil al despachador de IU principal en tus pruebas.

    Por ejemplo:

    @Test
    fun myTest() = runWithManualClock { clock ->
        // set some compose content
        withContext(TestUiDispatcher.Main) {
            clock.advanceClock(1000L)
        }
        if (clock.hasAwaiters) {
            println("The clock has awaiters")
        } else {
            println("The clock has no more awaiters")
        }
    }
    

    (I0a85b, b/161247083)

Correcciones de errores

  • onPreCommit dejó de estar disponible. onCommit ahora tiene el comportamiento de onPrecommit.

    OnCommit y OnActive ahora se ejecutan en el mismo fotograma Choreographer que los cambios de composición incluidos, y no al inicio del siguiente fotograma Coreographer. (I70403)

Versión 1.0.0-alpha01

26 de agosto de 2020

Lanzamiento de androidx.compose.animation:animation:1.0.0-alpha01 y androidx.compose.animation:animation-core:1.0.0-alpha01. La versión 1.0.0-alpha01 contiene estas confirmaciones.

Versión 0.1.0-dev

Versión 0.1.0-dev17

19 de agosto de 2020

Lanzamiento de androidx.compose.animation:animation:0.1.0-dev17 y androidx.compose.animation:animation-core:0.1.0-dev17. La versión 0.1.0-dev17 contiene estas confirmaciones.

Nuevas funciones

Cambios en la API

  • Offset se convirtió en una clase intercalada. (Iaec70)
  • IntOffset ahora es una clase intercalada. (Iac0bf)
  • IntSize ahora es una clase intercalada. (I2bf42)
  • El objeto AnimatedVisibility que admite composición anima la aparición y la desaparición del contenido secundario.

    Se introdujeron EnterTransition y ExitTransition para trabajar con el objeto AnimatedVisibilty que admite composición a fin de proporcionar 3 tipos diferentes de animaciones de aparición y desaparición: atenuar, deslizar y expandir/reducir el contenido. Puedes combinar estos tipos de animaciones y así lograr un diseño más personalizado. (Idda11)

  • PxBounds dejó de estar disponible y se reemplazó por Rect. Se actualizaron todos los usos de PxBounds con rect y se agregaron la baja y reemplazo adecuados, con anotaciones para ayudar con la migración. (I37038, b/162627058)

Correcciones de errores

  • Se cambió el nombre de PlacementScope.placeAbsolute() por PlacementScope.place(), y el del PlacementScope.place() anterior por PlacementScope.placeRelative(). Como resultado, el método PlacementScope.place() ya no duplicará automáticamente la posición en contextos de derecha a izquierda. Si quieres que eso ocurra, usa PlacementScope.placeRelative() en su lugar. (I873ac, b/162916675)
  • El elemento state { ... } que admite composición dejó de estar disponible en favor de cualquier llamada explícita a remember { mutableStateOf(...) } por motivos de claridad. De esta forma, se reduce la plataforma general de la API, así como la cantidad de conceptos para la administración de estados, y se hace coincidir el patrón by mutableStateOf() con la delegación de propiedades de clase. (Ia5727)

Versión 0.1.0-dev16

5 de agosto de 2020

Lanzamiento de androidx.compose.animation:animation:0.1.0-dev16 y androidx.compose.animation:animation-core:0.1.0-dev16. La versión 0.1.0-dev16 contiene estas confirmaciones.

Cambios en la API

  • Ahora se puede acceder mediante Foo.VectorConverter a los convertidores vectoriales a fin de convertir unidades integradas. P. ej., Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter, etc. (I3e273)
  • Brinda asistencia al objeto de escucha final en Modifier.animateContentSize() de modo que, cuando finalice la animación de cambio de tamaño, este reciba una notificación que indique la finalización y el tamaño inicial/final de la animación. (I277b2)
  • Nuevo modificador animateContentSize que anima el cambio de tamaño de diseño de su modificador secundario. (Ieffdc)
  • Se agregó MonotonicFrameAnimationClock, que te permite usar un MonotonicFrameClock como un AnimationClockObservable para cerrar la brecha entre los nuevos relojes basados en corrutinas y las API que aún usan los relojes antiguos basados en la devolución de llamada.

    El equivalente MonotonicFrameClock de ManualAnimationClock ahora es ManualFrameClock. (I111c7, b/161247083)

Correcciones de errores

  • Se actualizaron las API correspondientes a la compatibilidad de orientación de derecha a izquierda. Se agregó LayoutDirectionAmbient, que puede usarse para leer y cambiar la dirección del diseño. Se quitaron Modifier.rtl y Modifier.ltr. (I080b3)
  • Se requiere que el tipo T se especifique de forma explícita para transitionDefinition. (I1aded)
  • Se acopló el paquete foundation.shape.corner a foundation.share. (I46491, b/161887429)
  • Modifier.plus dejó de estar disponible; en su lugar, usa Modifier.then. "Then" tiene un indicador de orden más fuerte y, al mismo tiempo, prohíbe la escritura de Modifier.padding().background() + anotherModifier, lo que interrumpe la cadena y es más difícil de leer. (Iedd58, b/161529964)
  • Se cambió el nombre de Modifier.drawBackground por Modifier.background. (I13677)

Versión 0.1.0-dev15

22 de julio de 2020

Lanzamiento de androidx.compose.animation:animation:0.1.0-dev15 y androidx.compose.animation:animation-core:0.1.0-dev15. La versión 0.1.0-dev15 contiene estas confirmaciones.

Actualización de dependencias

  • Para usar la versión 0.1.0-dev15 de Compose, deberás actualizar tus dependencias de acuerdo con los nuevos fragmentos de código que se muestran más arriba en Cómo declarar dependencias.

Cambios en la API

  • Se modificó la API de Transition para mostrar un elemento TransitionState en lugar de pasar el objeto TransitionState a los elementos secundarios. Esto hace que la API sea más coherente con las API de animate(). (I24e38)
  • Se agregó el parámetro modificable para Crossfade. (I87cfe, b/159706180)
  • Usa AnimationSpec en lugar de AnimationBuilder en las API de nivel superior para aclarar el concepto de especificación de animación estática.
    • Mejora la DSL de transición mediante la eliminación del requisito lambda para crear AnimationSpecs, como la interpolación o la animación de resorte. En su lugar, toman parámetros de constructor en forma directa.
    • A fin de facilitar el uso general de AnimationSpec, establece constructores, en lugar de depender de compiladores.
    • Cambia la duración y el retraso de KeyFrames y Tween a Int. De esta manera, se eliminan las conversiones de tipos y la sobrecarga de métodos innecesarias (para admitir tanto Long como Int). (Ica0b4)
  • Se reemplazó el uso del elemento IntPx con Int. Se reemplazó el objeto IntPxPosition con IntOffset. Se reemplazó el elemento IntPxSize con IntSize. (Ib7b44)
  • A fin de consolidar las clases utilizadas para representar la información de tamaño, se estandarizó el uso de la clase Size en lugar de PxSize. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar el ancho y la altura. (Ic0191)
  • A fin de consolidar las clases utilizadas para representar la información de posicionamiento, se estandarizó el uso de la clase Offset en lugar de PxPosition. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar los desplazamientos x e y. (I3ad98)
  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I086f4)
  • Se agregó compatibilidad con animate() para Dp, Px, Tamaño, Posicionamiento, Límites, PxPosition, PxSize, PxBounds, IntPx, IntPxSize, IntPxPosition, IntPxBounds y AnimationVector. (lb7518)
  • Crossfade ahora acepta el parámetro AnimationBuilder opcional para permitir la configuración de la animación. (I6d6e0)
  • Se reemplazaron todos los usos anulables de color en la API con valores no anulables y se usa Color.Unset en lugar de un valor nulo. (Iabaa7)
  • Se quitó la clase ValueHolder. Se reestructuraron las clases AnimatedValue y AnimatedFloat para que el campo de valor de animación sea abstracto a fin de que las subclases puedan ver la actualización del valor.
    • Se agregaron clases de modelos para AnimatedValue, AnimatedFloat, etc.
    • Se agregó un nuevo conjunto de API liviana de @Composable para realizar animaciones entre valores. (I79530)
  • Cambios rotundos en la API de ambients. Consulta la documentación de registro y de Ambient<T> para obtener más detalles. (I4c7ee, b/143769776)
  • Nuevo modo de repetición: revertir. Este modo revierte la iteración anterior a medida que se repite la animación en RepeatableSpec o VectorizedRepeatableSpec. (Ibe0f5)
  • Se agregaron las siguientes API a ManualAnimationClock: hasObservers: Boolean y dispatchOnSubscribe: Boolean de parámetro de constructor. (Iaa134)
  • Se agregaron API para obtener límites mínimos/máximos en AnimatedFloat. (Icd9cc)

Correcciones de errores

  • Se cambió el nombre de runOnIdleCompose por runOnIdle. (I83607)
  • Se cambió el nombre de varias API de prueba con el fin de que sean más intuitivas. Se cambió el nombre de todas las API findXYZ por el de onNodeXYZ. Se cambió el nombre de todas las API doXYZ por el de performXYZ. (I7f164)
  • Se introdujeron las API de animación sin estado de bajo nivel. (I63bf7)
  • La función Recompose que admite composición ya no es una abstracción útil. La mayor parte de la recomposición debería ocurrir como resultado de las asignaciones de MutableState. Para todo lo demás, se recomienda usar la función invalidate a fin de activar una recomposición del alcance actual. (Ifc992)
  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. Se borró por completo la clase Px. (I3ff33)
  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (Id3434).
  • Los encadenados ahora pueden iniciarse con un valor nulo. (Iad6a4, b/155947711)
  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I19d02)
  • Se consolidaron las implementaciones de CanvasScope, por lo que ahora solo quedaron los elementos DrawScope y ContentDrawScope. Se cambió el nombre del objeto CanvasScope por DrawScope. Se actualizó DrawScope a fin de implementar la interfaz de Density y proporcionar LayoutDirection. Se borró la subclase DrawScope en ContentDrawScope. Se actualizaron Painter y PainterModifier de modo que ya no mantengan una propiedad RTL, ya que DrawScope la proporciona sin hacerlo manualmente. (I1798e)
  • Se actualizaron las API de Compose de nivel superior que exponen un lienzo para mostrar el objeto CanvasScope en su lugar. Esto elimina la necesidad de que los consumidores mantengan sus propios objetos Paint. Para los consumidores que aún necesitan acceso a un lienzo, pueden usar el método de extensión drawCanvas que proporciona una devolución de llamada a fin de emitir comandos de dibujo con el lienzo subyacente. (I80afd)
  • Se agregaron los parámetros verticalGravity y horizontalGravity a los elementos Row y Column, respectivamente. (I7dc5a)
  • Se cambió el nombre del módulo ui-text por ui-text-core. (I57dec)
  • Se mejoró la API de DrawModifier:
    • Se creó el alcance del receptor para draw() ContentDrawScope.
    • Se quitaron todos los parámetros de draw().
    • El objeto DrawScope tiene la misma interfaz que el elemento CanvasScope anterior.
    • El objeto ContentDrawScope tiene un método drawContent(). (Ibaced, b/152919067)
  • Los objetos runOnIdleCompose y runOnUiThread ahora son funciones globales en lugar de ser métodos en ComposeTestRule. (Icbe8f)
  • Los operadores delegados de la propiedad [Mutable]State se movieron a extensiones a fin de admitir optimizaciones delegadas de propiedad de Kotlin 1.4. Los emisores deben agregar importaciones para continuar usando by state { ... } o by mutableStateOf(...). (I5312c)
  • ColoredRect quedó obsoleto. Usa Box(Modifier.preferredSize(width, height).drawBackground(color)) en su lugar. (I499fa, b/152753731)
  • Se reemplazaron el modificador y el operador por funciones de extensión (I225e4)
  • El elemento Center que admite composición quedó obsoleto. Debe reemplazarse con el modificador LayoutSize.Fill + LayoutAlign.Center o con una de las funciones que admiten composición, Box o Stack, con los modificadores adecuados aplicados. (Idf5e0)
  • Se cambió el nombre de LayoutFlexible por LayoutWeight. Se cambió el nombre del parámetro estricto para completar. (If4738)
  • Se reemplazó la función Opacity que admite composición por el modificador drawOpacity. (I5fb62)
  • Las pruebas que usan AndroidCompositTestRule ahora proporcionan un reloj de animación en la raíz de la composición que se puede pausar, reanudar y avanzar manualmente. (Id54c5)
  • Compatibilidad con lectura de derecha a izquierda en el modificador LayoutPadding. (I9e8da)
  • Se combinaron Density y DensityScope en una sola interfaz. En lugar de ambientDensity(), ahora puedes usar DensityAmbient.current. En lugar de withDensity(density), usa with(density). (I11cb1)
  • Se agregaron métodos de copia a varios tipos de clases intercaladas, entre otras:
    • Desplazamiento
    • Tamaño
    • Radio
    • Movimiento
    • TransformOrigin
    • El método del objeto complementario Size.copy dejó de estar disponible, y se reemplazó por el método de copia de instancias. (Ife290, b/159905651)
  • Se trasladó el objeto androidx.compose.ViewComposer al elemento androidx.ui.node.UiComposer androidx.compose. Se quitó el parámetro Emittable. Era redundante con el objeto ComponentNode. Se quitó el elemento androidx.compose.ViewAdapters. Ya no es un caso práctico admitido. Compose.composeInto quedó obsoleto. En su lugar, usa los elementos setContent o setViewContent. El componente Compose.disposeComposition dejó de estar disponible. En su lugar, usa el método dispose en el Composition que muestra setContent. Se movió androidx.compose.Compose.subcomposeInto a androidx.ui.core.subcomposeInto. Se cambió el nombre de ComponentNode#emitInsertAt a ComponentNode#insertAt, el de ComponentNode#emitRemoveAt a ComponentNode#removeAt y el de ComponentNode#emitMode a ComponentNode#move. (Idef00)