A Visualização do desenvolvedor para Android 11 já está disponível. Teste e compartilhe seu feedback.

Animação de visualizações

Você pode usar o sistema de animação de visualizações para realizar uma animação interpolada. A animação de interpolação calcula a animação com informações como ponto de início, ponto de término, tamanho, rotação e outros aspectos comuns de animações.

Uma animação de interpolação pode realizar uma série de transformações simples (posição, tamanho, rotação e transparência) no conteúdo de um objeto View. Portanto, se você tiver um objeto TextView, será possível mover, girar, aumentar ou reduzir o texto. Se houver uma imagem de plano de fundo, ela será transformada junto com o texto. O animation package disponibiliza todas as classes usadas em uma animação de interpolação.

Uma sequência de instruções define a animação de interpolação, determinada pelo código do XML ou do Android. Como na definição de um layout, um XML file é recomendado porque é mais legível, reutilizável e trocável do que codificar a animação. No exemplo abaixo, usamos XML. Para saber mais sobre como definir uma animação no código do aplicativo, em vez de XML, consulte a classe AnimationSet e outras subclasses Animation subclasses.

As instruções de animação definem as transformações que você quer realizar, quando elas ocorrerão e quanto tempo elas levarão para entrar em vigor. As transformações podem ser sequenciais ou simultâneas. Por exemplo, o conteúdo de um TextView pode ser movido da esquerda para a direita e depois rotacionado 180 graus, ou o texto pode ser movido e rotacionado simultaneamente. Cada transformação usa um conjunto de parâmetros específicos (tamanhos inicial e final para mudança de tamanho, ângulos inicial e final para rotação e assim por diante) e também um conjunto de parâmetros comuns (como horário de início e duração). Para que várias transformações aconteçam simultaneamente, atribua a elas o mesmo horário de início. Para torná-las sequenciais, calcule o horário de início mais a duração da transformação anterior.

O XML file da animação pertence ao diretório res/anim/ do seu projeto Android. O arquivo precisa ter um único elemento raiz, que será um único <alpha>, <scale>, <translate>, <rotate>, elemento interpolador ou elemento <set> que contenha grupos desses elementos (que pode incluir outro <set>). Por padrão, todas as instruções da animação entram em vigor simultaneamente. Para que elas ocorram em sequência, é preciso especificar o atributo startOffset, como mostrado no exemplo abaixo.

O XML a seguir de um dos ApiDemos é usado para alongar, depois girar e rotacionar simultaneamente um objeto View.

    <set android:shareInterpolator="false">
        <scale
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:fromXScale="1.0"
            android:toXScale="1.4"
            android:fromYScale="1.0"
            android:toYScale="0.6"
            android:pivotX="50%"
            android:pivotY="50%"
            android:fillAfter="false"
            android:duration="700" />
        <set android:interpolator="@android:anim/decelerate_interpolator">
            <scale
               android:fromXScale="1.4"
               android:toXScale="0.0"
               android:fromYScale="0.6"
               android:toYScale="0.0"
               android:pivotX="50%"
               android:pivotY="50%"
               android:startOffset="700"
               android:duration="400"
               android:fillBefore="false" />
            <rotate
               android:fromDegrees="0"
               android:toDegrees="-45"
               android:toYScale="0.0"
               android:pivotX="50%"
               android:pivotY="50%"
               android:startOffset="700"
               android:duration="400" />
        </set>
    </set>
    

As coordenadas da tela (não usadas nesse exemplo) são (0,0) no canto superior esquerdo e aumentam à medida que você desce e vai para a direita.

Alguns valores, como pivotX, podem ser especificados em relação ao objeto em si ou ao pai. Use o formato correto de acordo com sua necessidade ("50" para 50% em relação ao pai, ou "50%" para 50% em relação ao próprio objeto).

É possível determinar como uma transformação é usada ao longo do tempo atribuindo um Interpolator. O Android inclui várias subclasses interpoladoras que especificam diversas curvas de velocidade. Por exemplo, AccelerateInterpolator pede que a transformação inicie lentamente e acelere. Cada uma delas tem um valor de atributo que pode ser aplicado no XML.

Com esse XML salvo como hyperspace_jump.xml no diretório res/anim/ do projeto, o código a seguir o referenciará e aplicará a um objeto ImageView a partir do layout.

Kotlin

    AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation ->
        findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation)
    }
    

Java

    ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
    Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    spaceshipImage.startAnimation(hyperspaceJumpAnimation);
    

Como alternativa a startAnimation(), é possível definir um horário de início para a animação com Animation.setStartTime() e atribuir a animação à visualização com View.setAnimation().

Para mais informações sobre a sintaxe XML, tags e atributos disponíveis, consulte Recursos de animação.

Observação: independentemente de como sua animação é movida ou redimensionada, os limites da visualização que contém a animação não serão ajustados automaticamente para acomodá-la. Mesmo assim, a animação ainda será desenhada além dos limites da visualização e não será cortada. No entanto, o corte ocorrerá se a animação exceder os limites da visualização mãe.