Exibição de animação

Você pode usar o sistema de animação de visualizações para realizar uma animação interpolada. Animação de interpolação calcula a animação com informações como ponto inicial, ponto final, tamanho, rotação e outros aspectos comuns de uma animação.

Uma animação de interpolação pode realizar uma série de transformações simples (posição, tamanho, rotação, e transparência) do conteúdo de um objeto View. Portanto, se você tiver um objeto TextView, será possível mover, girar, aumentar ou reduzir o texto. Se ele tiver um imagem de plano de fundo, a imagem de plano de fundo 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 de animação define a animação de interpolação, definida por XML ou Código do Android. Assim como na definição de um layout, um arquivo XML é recomendado por ser mais legível, reutilizáveis e alternáveis do que codificar a animação. No exemplo abaixo, usamos XML. (Para saiba mais sobre como definir uma animação no código do aplicativo, em vez de XML, consulte a classe AnimationSet e outras subclasses Animation.

As instruções de animação definem as transformações que devem ocorrer, quando e quanto tempo elas levarão para se aplicar. As transformações podem ser sequenciais ou simultâneas Por exemplo, é possível mover o conteúdo de uma TextView da esquerda para a direita e, em seguida, girar 180 graus, ou mover e girar o texto simultaneamente. Cada transformação leva conjunto de parâmetros específicos para essa transformação (tamanho inicial e final para tamanho mudança, ângulo inicial e final para rotação, e assim por diante), e também um conjunto de pontos comuns (por exemplo, horário de início e duração). Para que várias transformações aconteçam simultaneamente, têm a mesma hora de início; para torná-las sequenciais, calcule o horário de início mais a duração da transformação anterior.

O arquivo XML de animação pertence ao diretório res/anim/ do Android. projeto. O arquivo deve ter um único elemento raiz: ele será um único <alpha>, <scale> e <translate>. <rotate>, um elemento interpolador ou um elemento <set> que contém grupos desses elementos, que podem incluir outro <set>. Por padrão, todas as instruções de animação são aplicadas simultaneamente. Para que elas ocorram em sequência, você precisa especifique o atributo startOffset, conforme mostrado no exemplo abaixo.

O XML a seguir de um dos ApiDemos é usado para alongar, depois girar simultaneamente e girar 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 neste exemplo) são (0,0) no canto superior esquerdo e aumentam à medida que você desce e para a direita.

Alguns valores, como pivotX, podem ser especificados em relação ao próprio objeto ou ao pai Use o formato adequado para o que você quer ("50" para 50% em relação ao pai, ou "50%" para 50% em relação a si mesmo).

É possível determinar como uma transformação é usada ao longo do tempo atribuindo um Interpolator. O Android inclui várias subclasses interpoladoras que especificar várias curvas de velocidade, como AccelerateInterpolator; instrui a transformação a iniciar devagar e acelerar. Cada um tem um valor de atributo que pode ser aplicada no XML.

Com esse XML salvo como hyperspace_jump.xml no arquivo res/anim/ do projeto, o código a seguir vai fazer referência a ele e aplicá-lo a um objeto ImageView 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 ao startAnimation(), é possível definir um horário de início para o com Animation.setStartTime() e atribua 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 a animação pode ser movida ou redimensionada, o os limites da visualização que contém sua 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.