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 inicial, ponto final, tamanho, rotação e outros aspectos comuns.
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 tiver 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
.
As instruções de animação definem as transformações que você quer que ocorram, quando elas ocorrerão e quanto tempo elas levarão para serem aplicadas. 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 fazer com que o texto se mova e gire simultaneamente. Cada transformação usa um conjunto de parâmetros específicos para essa transformação (tamanho inicial e final para mudança de tamanho, ângulo inicial e final para rotação e assim por diante), além de um conjunto de parâmetros comuns (por exemplo, horário de início e duração). Para que várias transformações aconteçam simultaneamente, dê 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 arquivo XML da animação pertence ao diretório res/anim/
do 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 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, é preciso
especificar o atributo startOffset
, como mostrado no exemplo abaixo.
O XML a seguir de um dos ApiDemos é usado para alongar e depois girar 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 neste 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
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
e atribuir a animação à visualização com Animation.setStartTime()
.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 sã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.