As animações podem adicionar dicas visuais que notificam os usuários sobre o que está acontecendo no app. Elas são especialmente úteis quando a interface muda de estado, por exemplo, quando um novo conteúdo é carregado ou novas ações ficam disponíveis. As animações também dão um visual sofisticado ao app, o que proporciona uma aparência e uma sensação de maior qualidade.
O Android inclui APIs de animação diferentes, dependendo do tipo de animação que você quer. Esta documentação apresenta uma visão geral das diferentes maneiras de adicionar movimento à sua interface.
Para entender melhor quando você precisa usar animações, consulte também o guia do Material Design sobre movimento.
Animar bitmaps
Para animar um gráfico de bitmap, como um ícone ou uma ilustração, use as APIs de animação de drawables. Geralmente, essas animações são definidas estaticamente com um recurso de drawable, mas você também pode definir o comportamento da animação no momento da execução.
Por exemplo, uma boa maneira de comunicar ao usuário que duas ações estão relacionadas é animar um botão de reprodução que se transforma em um botão de pausa quando tocado.
Para mais informações, leia Animar gráficos drawable.
Animar a visibilidade e o movimento da IU
Quando você precisa mudar a visibilidade ou a posição das visualizações no layout, é melhor incluir animações sutis para ajudar o usuário a entender como a interface está mudando.
Para mover, revelar ou ocultar visualizações no layout atual, use o
sistema de animação de propriedades fornecido pelo pacote android.animation
, disponível no Android 3.0
(API de nível 11) e em versões mais recentes. Essas APIs atualizam as propriedades dos seus objetos View
por um período, redesenhando continuamente a visualização conforme as propriedades mudam. Por exemplo, quando você muda as
propriedades de posição, a visualização se move pela tela. Quando você muda a propriedade
Alfa, a visualização entra ou sai de foco.
Para criar essas animações da maneira mais simples, ative animações no layout para que, ao mudar a visibilidade de uma visualização, uma animação seja aplicada automaticamente. Para mais informações, consulte Animar automaticamente atualizações de layout.
Para saber como criar animações usando o sistema de animação de propriedades, leia a Visão geral da animação de propriedade. Também é possível consultar as páginas a seguir para criar animações comuns:
Alterar a visibilidade de uma visualização com uma revelação circular.
Alterar o tamanho da visualização com uma animação com zoom.
Movimento baseado em física
Sempre que possível, aplique a física do mundo real às animações para que elas tenham uma aparência natural. Por exemplo, elas precisam manter o impulso quando tiverem o destino alterado, com transições suaves diante de qualquer alteração.
Para fornecer esses comportamentos, a Biblioteca de Suporte do Android inclui APIs de animação baseadas em física que dependem das leis da física para controlar a maneira como suas animações ocorrem.
Duas animações comuns baseadas em física são as seguintes:
Animações que não são baseadas na física, como as criadas com APIs ObjectAnimator
, são bastante estáticas e têm uma
duração fixa. Se o valor da meta mudar, você vai precisar cancelar a animação no
momento da mudança, reconfigurar a animação com um novo valor inicial e adicionar o novo valor de destino. Visualmente, esse processo
cria uma parada abrupta na animação e um movimento desarticulado depois,
como mostrado na Figura 3.
Já animações criadas com APIs de animação baseadas em física, como
DynamicAnimation
, são impulsionadas pela
força. A mudança no valor desejado resulta em uma mudança na força. A nova
força se aplica à velocidade atual, que faz uma transição contínua para
o novo alvo. Esse processo resulta em uma animação mais natural, como
mostrado na Figura 4.
Animar alterações de layout
No Android 4.4 (nível 19 da API) e versões mais recentes, você pode usar o framework de transição para criar animações ao trocar o layout na atividade ou no fragmento atual. Você só precisa especificar o layout inicial e final e o tipo de animação que você quer usar. Em seguida, o sistema descobre e executa uma animação entre os dois layouts. Use esse recurso para trocar toda a interface ou mover ou substituir apenas algumas visualizações.
Por exemplo, quando o usuário toca em um item para ver mais informações, você pode substituir o layout pelos detalhes do item, aplicando uma transição como a mostrada na Figura 5.
O layout inicial e final são armazenados em um
Scene
, embora a cena inicial geralmente seja
determinada automaticamente pelo layout atual. Você cria uma
Transition
para informar ao sistema que
tipo de animação você quer e, em seguida, chama
TransitionManager.go()
.
O sistema executa a animação para trocar os layouts.
Para mais informações, leia Animar mudanças de layout usando uma transição. Para ver uma amostra de código, consulte BasicTransition (link em inglês).
Animar entre atividades
No Android 5.0 (API de nível 21) e versões mais recentes, você também pode criar animações que fazem a transição entre suas atividades. Isso é baseado no mesmo framework de transição descrito na seção anterior, mas permite criar animações entre layouts em atividades separadas.
Você pode aplicar animações simples, como deslizar a nova atividade pelo lado ou fazê-la aparecer gradualmente, mas também pode criar animações que fazem a transição entre visualizações compartilhadas em cada atividade. Por exemplo, quando o usuário toca em um item para conferir mais informações, você pode fazer a transição para uma nova atividade com uma animação que aumenta o item até preencher a tela, como a mostrada na Figura 5.
Como de costume, você chama
startActivity()
,
mas transmite um pacote de opções fornecido por
ActivityOptions.makeSceneTransitionAnimation()
.
Esse pacote de opções pode incluir quais visualizações são compartilhadas entre as
atividades para que o framework de transição possa conectá-las durante a animação.
Para mais recursos, consulte:
- Iniciar uma atividade usando uma animação
- ActivitySceneTransitionBasic (link em inglês)