O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Compose Animation

Guia do usuário  Amostra de código (link em inglês)
Crie animações nos aplicativos do Jetpack Compose para enriquecer a experiência do usuário.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
16 de setembro de 2020 - - - 1.0.0-alpha03

Estrutura

O Compose é uma combinação de sete IDs de grupos do Maven em androidx. Cada grupo contém um subconjunto direcionado de funcionalidades, cada um com um conjunto próprio de notas da versão.

Esta tabela explica os grupos e contém links para cada conjunto de notas da versão.

GrupoDescrição
composeDefina a IU de maneira programática com funções compostas que descrevem a forma e as dependências de dados dela.
compose.animationCrie animações nos aplicativos do Jetpack Compose para enriquecer a experiência do usuário.
compose.foundationCrie aplicativos do Jetpack Compose com blocos de versão prontos e amplie a base para criar suas próprias peças de sistema de design.
compose.materialCrie IUs do Jetpack Compose com componentes do Material Design prontos para uso. Este é o ponto de entrada de nível mais alto do Compose, projetado para fornecer componentes que correspondam aos descritos em www.material.io.
compose.runtimeElementos fundamentais do modelo de programação e do gerenciamento de estado do Compose e do ambiente de execução principal do plug-in Compose Compiler.
compose.uiComponentes fundamentais da IU do Compose necessários para interagir com o dispositivo, incluindo layout, desenho e entrada.
iuFunciona com a biblioteca Jetpack Compose.

Declarar dependências

Para adicionar uma dependência ao Compose, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários no arquivo build.gradle para seu app ou 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 ver mais informações sobre dependências, consulte Adicionar dependências de compilação.

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas existentes (link em inglês) nesta biblioteca antes de criar um novo. Adicione seu voto a um problema existente clicando no botão de estrela.

Criar novo problema (link em inglês)

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.0.0

Versão 1.0.0-alpha03

16 de setembro de 2020

Lançamento de androidx.compose.animation:animation:1.0.0-alpha03 e androidx.compose.animation:animation-core:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estas confirmações.

Correções de bugs

  • Os usos da gravidade foram renomeados de forma consistente para align ou alignment nas APIs de layout (I2421a, b/164077038).

Versão 1.0.0-alpha02

2 de setembro de 2020

Lançamento de androidx.compose.animation:animation:1.0.0-alpha02 e androidx.compose.animation:animation-core:1.0.0-alpha02. A versão 1.0.0-alpha02 contém essas confirmações.

Mudanças na API

  • Adição de ManualFrameClock.hasAwaiters para ver se algo está aguardando um frame desse relógio, runWithManualClock como uma substituição de runBlocking ao executar testes que precisam de um ManualFrameClock e TestUiDispatcher.Main que fornece acesso fácil ao principal agente de IU nos seus testes.

    Exemplo:

    @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).

Correções de bugs

  • O onPreCommitte foi suspenso. O onCommit agora tem o comportamento do onPreCommit.

    O onCommit e o onActive agora são executados no mesmo frame choreographer que a composição muda, em vez de no início do próximo frame choreographer. I70403

Versão 1.0.0-alpha01

26 de agosto de 2020

Lançamento de androidx.compose.animation:animation:1.0.0-alpha01 e androidx.compose.animation:animation-core:1.0.0-alpha01. A versão 1.0.0-alpha01 contém essas confirmações.

Versão 0.1.0-dev

Versão 0.1.0-dev17

19 de agosto de 2020

Lançamento de androidx.compose.animation:animation:0.1.0-dev17 e androidx.compose.animation:animation-core:0.1.0-dev17. A versão 0.1.0-dev17 contém essas confirmações.

Novos recursos

Mudanças na API

  • Offset se tornou uma classe in-line (Iaec70).
  • IntOffset agora é uma classe inline (Iac0bf).
  • IntSize agora é uma classe in-line (I2bf42).
  • O composto AnimatedVisibilty anima o aparecimento e o desaparecimento do conteúdo filho.

    Introdução de EnterTransition e ExitTransition para trabalhar com o composto AnimatedVisibilty e fornecer três tipos diferentes de animação de aparecimento e desaparecimento: esmaecer, deslizar e expandir/reduzir o conteúdo. Os diferentes tipos de animação podem ser combinados para alcançar uma aparência mais personalizada (Idda11).

  • Suspensão do uso de PxBounds em favor de Rect. Atualização de todos os usos de PxBounds com rect e adição de suspensão de uso/substituição por anotações para auxiliar na migração (I37038, b/162627058).

Correções de bugs

  • PlacementScope.placeAbsolute() foi renomeado como PlacementScope.place(), e o PlacementScope.place() anterior foi renomeado como PlacementScope.placeRelative(). Por essa razão, o método PlacementScope.place() não espelhará de forma automática a posição em contextos da direita para a esquerda. Se você quiser o espelhamento, use PlacementScope.placeRelative() (I873ac, b/162916675).
  • O uso do composto state { ... } foi substituído pelas chamadas explícitas para remember { mutableStateOf(...) } para maior clareza. Isso reduz a plataforma geral da API e o número de conceitos de gerenciamento de estado e corresponde ao padrão by mutableStateOf() para delegação de propriedade de classe. (Ia5727).

Versão 0.1.0-dev16

5 de agosto de 2020

Lançamento de androidx.compose.animation:animation:0.1.0-dev16 e androidx.compose.animation:animation-core:0.1.0-dev16. A versão 0.1.0-dev16 contém essas confirmações.

Mudanças na API

  • Os conversores de vetor integrados para converter unidades integradas agora podem ser acessados por meio de Foo.VectorConverter. Por exemplo, Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter etc. (I3e273).
  • Compatibilidade com o listener final em Modifier.animateContentSize(), de modo que, quando a animação de mudança de tamanho termina, o listener seja notificado, junto do tamanho inicial/final da animação. (I277b2).
  • Novo modificador animateContentSize, que anima a mudança do tamanho do layout do modificador filho (Ieffdc).
  • Adição de MonotonicFrameAnimationClock, que permite usar um MonomonicFrameClock como um AnimationClockObservable para fazer a ponte entre os novos relógios e APIs baseados em corrotinas que ainda usam os relógios antigos com base em callback.

    O MonotonicFrameClock equivalente de ManualAnimationClock agora é ManualFrameClock (I111c7, b/161247083).

Correções de bugs

  • Atualização das APIs para compatibilidade da direita para a esquerda. LayoutDirectionAmbient foi adicionado e pode ser usado para ler e mudar a direção do layout. Modifier.rtl e Modifier.ltr foram removidos (I080b3).
  • Exigência de que o tipo T seja especificado explicitamente para o transitionDefinition (I1aded).
  • O pacote foundation.shape.corner foi nivelado para foundation.share (I46491, b/161887429).
  • Suspensão do uso de Modifier.plus. Use Modifier.then. "Then" tem um sinal mais forte de ordem, mas também proíbe o tipo Modifier.padding().background() + anotherModifier, que interrompe a cadeia e é mais difícil de ler (Iedd58, b/161529964).
  • Renomeação de Modifier.drawBackground como Modifier.background (I13677).

Versão 0.1.0-dev15

22 de julho de 2020

Lançamento de androidx.compose.animation:animation:0.1.0-dev15 e androidx.compose.animation:animation-core:0.1.0-dev15. A versão 0.1.0-dev15 contém essas confirmações.

Atualização de dependências

  • Para usar a versão 0.1.0-dev15 do Compose, será necessário atualizar suas dependências de acordo com os novos snippets de código mostrados acima em Como declarar dependências.

Mudanças na API

  • A API Transition foi modificada para retornar um TransitionState em vez de passar o TransitionState para filhos. Isso torna a API mais consistente com as APIs animate() (I24e38).
  • Parâmetro modificador adicionado para o Crossfade (I87cfe, b/159706180).
  • Use AnimationSpec em vez de AnimationBuilder nas APIs de nível superior para esclarecer o conceito de especificação de animação estática.
    • Melhore a DSL de transição removendo o requisito de lambda para criar AnimationSpecs, como Tween, Spring. Em vez disso, os parâmetros do construtor são recebidos diretamente.
    • Melhore a facilidade geral de uso do AnimationSpec para abrir construtores em vez de depender deles.
    • Mudança na duração e no atraso de KeyFrames e Interpolação para Int. Isso elimina as transmissões desnecessárias e a sobrecarga de métodos (para oferecer compatibilidade com Long e Int) (Ica0b4).
  • Uso de IntPx substituído por Int e o de IntPxPosition por IntOffset. IntPxSize foi substituído por IntSize (Ib7b44).
  • Para consolidar o número de classes usadas para representar informações de tamanho, padronize o uso da classe Size em vez de PxSize. Isso fornece os benefícios de uma classe inline para usar um long para empacotar dois valores de pontos flutuantes e representar a largura e a altura como flutuantes (Ic0191).
  • Para consolidar o número de classes usadas para representar informações de posicionamento, padronize o uso da classe Offset em vez de PxPosition. Isso fornece os benefícios de uma classe inline para usar um long para empacotar dois valores de pontos flutuantes e representar os deslocamentos x e y como flutuantes (I3ad98).
  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para depender apenas de tipos primitivos e de Dp para os parâmetros de pixel (I086f4).
  • Inclusão de compatibilidade com animate() para Dp, Px, Size, Position, Bounds, PxPosition, PxSize, PxBounds, IntPx, IntPxSize, IntPxPosition, IntPxBounds e AnimationVector (Ib7518).
  • O Crossfade agora aceita o parâmetro AnimationBuilder opcional para permitir a configuração da animação (I6d6e0).
  • Todos os usos de Color anuláveis foram substituídos na API por não anuláveis e usam Color.Unset em vez de null (Iabaa7).
  • Classe ValueHolder removida. Reestruturação das classes AnimatedValue e AnimatedFloat para tornar o campo de valor da animação abstrato para que as subclasses possam observar a atualização do valor.
    • Adição de classes de modelo para AnimatedValue, AnimatedFloat etc.
    • Adição de um novo conjunto de APIs @Composable leves para animação entre valores (I79530).
  • Alterações interruptivas na API de ambientes. Consulte o registro e a documentação do Ambient<T> para ver detalhes (I4c7ee, b/143769776).
  • Novo modo de repetição: inverso. Esse modo reverte a iteração anterior à medida que a animação se repete em RepeatableSpec ou VectorizedRepeatableSpec (Ibe0f5).
  • Adições de API ao ManualAnimationClock: hasObservers: Boolean e dispatchOnSubscribe: Boolean de parâmetro construtor (Iaa134).
  • Adição de APIs para receber os limites mínimo/máximo em AnimatedFloat (Icd9cc).

Correções de bugs

  • runOnIdleCompose foi renomeado como runOnIdle (I83607).
  • Várias APIs de teste foram renomeadas para serem mais intuitivas. Todas as APIs findXYZ foram renomeadas como onNodeXYZ. Todas as APIs doXYZ foram renomeadas como performXYZ (I7f164).
  • Foram introduzidas estas APIs de animação sem estado de baixo nível (I63bf7, links em inglês).
  • O composto Recompose não é mais uma abstração útil. A maioria das recomposições precisa acontecer como resultado de atribuições MutableState. Para qualquer coisa além disso, é recomendável usar a função invalidate para acionar uma recomposição do escopo atual (Ifc992, link em inglês).
  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel. Classe Px excluída na íntegra (I3ff33, link em inglês).
  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (Id3434, link em inglês).
  • Crossfade agora pode funcionar com nulo como valor inicial (Iad6a4, b/155947711, links em inglês).
  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (I19d02).
  • Implementações consolidadas de CanvasScope para que agora exista apenas o DrawScope e o ContentDrawScope. CanvasScope foi renomeado como DrawScope. Atualização do DrawScope para implementar a interface de densidade e fornecer a subclasse LayoutDirection. Exclusão de DrawScope no ContentDrawScope. Painter and PainterModifier foram atualizados para não manter mais uma propriedade RTL uma vez que DrawScope já fornece isso sem fornecê-la manualmente (I1798e).
  • Atualização das APIs de composição de nível superior que expõem uma tela para expor o CanvasScope. Isso elimina a necessidade dos consumidores manterem seus próprios objetos de pintura. Os consumidores que ainda precisam de acesso a uma tela podem usar o método de extensão drawCanvas, que fornece um retorno de chamada para emitir comandos de desenho com a tela subjacente. (I80afd).
  • Adição dos parâmetros verticalGravity e horizontalGravity a Row e Column, respectivamente (I7dc5a).
  • O módulo ui-text foi renomeado como ui-text-core (I57dec).
  • Melhora da API DrawModifier:
    • Definição do escopo do receptor para draw() ContentDrawScope
    • Remoção de todos os parâmetros em draw()
    • DrawScope tem a mesma interface que o antigo CanvasScope
    • O ContentDrawScope tem o método drawContent() (Ibaced, b/152919067).
  • runOnIdleCompose e runOnUiThread agora são funções globais e não métodos em ComposeTestRule (Icbe8f).
  • [Mutable] Os operadores para delegação de propriedade de estado foram movidos para extensões compatíveis com as otimizações de delegação de propriedade do Kotlin 1.4. Os autores da chamada precisam adicionar importações para continuar usando by state { ... } ou by mutableStateOf(...) (I5312c).
  • O ColouredRect foi suspenso. Use Box(Modifier.preferredSize(width, height).drawBackground(color)) (I499fa, b/152753731).
  • Substituição de modificador mais operador por funções de extensão de fábrica (I225e4, link em inglês)
  • O composto Center está obsoleto. Ele precisa ser substituído pelo modificador LayoutSize.Fill + LayoutAlign.Center ou por um dos compostos Box ou Stack com modificadores adequados aplicados (Idf5e0).
  • O LayoutFlexible foi renomeado como LayoutWight. O parâmetro restrito foi renomeado como preenchimento. (I5977f, link em inglês)
  • A função do composto Opacity foi substituída pelo modificador drawOpacity (I5fb62).
  • Agora, os testes que usam AndroidComposeTestRule oferecem um relógio de animação na raiz da composição que permite que ele pause, retome e avance manualmente (Id54c5).
  • Compatibilidade com a direção direita para a esquerda no modificador LayoutPadding (I9e8da).
  • Density e DensityScope foram unidos em uma única interface. Agora você pode usar DensityAmbient.current em vez de ambientDensity(). Em vez de withDensity(density), use apenas with(density) (I11cb1).
  • Adição de métodos de cópia para vários tipos de classe inline, incluindo:
    • Offset
    • Size
    • Radius
    • Motion
    • TransformOrigin
    • O método de objeto complementar Size.copy está obsoleto e foi substituído pelo método de cópia de instância (Ife290, b/159905651).
  • O androidx.composte.ViewComposer foi movido para androidx.ui.node.UiComposer. androidx.compose.Emittable foi removido. Isso era redundante com o ComponentNode. O androidx.compose.ViewAdapters foi removido. Eles não são mais um caso de uso compatível. O uso de Compose.composeInto foi suspenso. Use setContent ou setViewContent. O uso de Compose.disposeComposition foi suspenso. Use o método dispose no Composition retornado pelo setContent. androidx.compose.Compose.subcomposeInto foi movido para androidx.ui.core.subcomposeInto. ComponentNode#emitInsertAt foi renomeado como ComponentNode#insertAt. ComponentNode#emitRemoveAt foi renomeado como ComponentNode#removeAt. ComponentNode#emitMode foi renomeado como ComponentNode#move (Idef00).