Tutorial de Animação Andróide e Exemplos.
Em geral, uma animação é um meio dinâmico no qual imagens ou objetos são manipulados para aparecerem como imagens em movimento.
Isto se Wikipedia for para ser acreditado. A Webopedia, por outro lado, define uma animação como uma simulação de movimento criada pela exibição de uma série de imagens, ou molduras.
Não é a arte de fazer desenhos se mover, mas a arte de desenhar movimento, de acordo com Science World British Columbia.
Assim, sempre que a interface do usuário muda em resposta à ação do usuário, devemos nos esforçar para animar as transições de layout. As animações são importantes, pois fornecem aos usuários um feedback sobre suas ações. Isto ajuda a mantê-las orientadas para a interface de usuário.
Para animar facilmente as mudanças entre duas hierarquias de visualização, podemos usar o Android Transitions Framework. Este framework nos anima as visões em tempo de execução. Ele faz isso alterando alguns dos valores de propriedade dessas visões ao longo do tempo. Recebemos animações incorporadas para efeitos comuns. Além disso, através deste framework, podemos criar animações personalizadas e chamadas de retorno do ciclo de vida de transição.
Podemos visualizar pistas através de animações. Estas então podem notificar os usuários sobre o que está acontecendo em nosso aplicativo. Especialmente quando a interface do usuário muda de estado, como quando novas cargas de conteúdo ou novas ações se tornam disponíveis.
O Android nos fornece várias APIs de animação.
(a). Animações Bitmap
O Android fornece APIs de animação desenháveis. Essas APIs são, na maioria dos casos, definidas estaticamente com um recurso sorteável. No entanto, também podemos defini-las em tempo de execução. Essas APIs de animação nos permitem animar bitmaps.
Encontre mais detalhes aqui.
(b). Visibilidade da IU e Animações de Movimento
Muitas vezes você precisa manipular a visibilidade ou a posição das vistas dentro de um layout. Nesse caso, você deve incluir animações sutis para ajudar o usuário a entender como a IU está mudando.
Por exemplo, você pode:
- mover.
- revelar.
- hideviews.Para isso você pode utilizar o sistema de animação da propriedade fornecido pelo pacote
android.animation
. Este pacote está disponível emAndroid 3.0 (API nível 11)
e superior.
Estas APIs funcionam atualizando as propriedades de nossos objetos View ao longo de um período de tempo. Assim, as views são continuamente redesenhadas à medida que as propriedades mudam.
Encontre mais documentação aqui.
(c). Movimento baseado na física
Você pode criar animações aplicando a física do mundo real, o que torna essas animações de aparência natural. Por exemplo, elas devem manter o impulso quando seu alvo muda, e fazer transições suaves durante qualquer mudança.
A Biblioteca de suporte do Android nos dá as APIs para a criação dessas animações. Essas APIs realmente aplicam as leis da física para controlar como suas animações ocorrem.
(d). Animações de layout
O Quadro de Transição nos permite criar animações quando trocamos o layout dentro da atividade atual de fragmento. Entretanto, isto só é aplicável em 'Android 4.4(API Level 19)` e acima.
Para fazer isto você especifica o layout inicial e final, e que tipo de animação você deseja utilizar. O sistema irá então descobrir e executar uma animação entre os dois layouts. Você pode utilizar isto para trocar toda a interface de usuário ou para mover/substituir apenas algumas vistas.
(e). Atividades Animação
Você também pode criar animações que fazem a transição entre as atividades. Isto só se aplica ao Android 5.0 (nível API 21)
e superior. Mais uma vez, isto se baseia na mesma estrutura de transição descrita acima para animar mudanças de layout. Entretanto, neste caso, nos permite criar animações entre layouts em atividades separadas.
Podemos aplicar animações simples como, por exemplo, deslizar a nova atividade de um lado para o outro ou desvanecê-la. Também podemos criar animações que fazem a transição entre visões compartilhadas em cada atividade.
Você chama startActivity()
, mas passa um pacote de opções fornecidas por ActivityOptions.makeSceneTransitionAnimation()
. Este pacote de opções pode incluir quais visões são compartilhadas entre as atividades para que a estrutura de transição possa conectá-las durante a animação.
ObjectAnimator
Tutorial e Exemplos de ObjectAnimator Android
ObjectAnimator é uma classe que permite propriedades sobre objetos-alvo. Esta classe deriva de 'Android.animation.ValueAnimator'.
O 'ValueAnimator' é responsável por fornecer um mecanismo de tempo simples para executar animações que calcula valores animados e os define nos objetos de destino.
Através dos construtores de nosso `ObjectAnimator', passamos o objeto alvo que precisa ser animado. Também passamos o nome do objeto a ser animado.
ObjectAnimator API Definição
O "ObjectAnimator" deriva da classe "ValueAnimator". Ambos residem no pacote android.animation
:
public final class ObjectAnimator
extends ValueAnimator
Aqui está o tee herança:
java.lang.Object
↳ android.animation.Animator
↳ android.animation.ValueAnimator
↳ android.animation.ObjectAnimator
Colocação de Animações
Você pode definir animações tanto em código como em recurso xml estático. Aqui está um exemplo de configuração usando xml:
<objectAnimator
android_duration="1000"
android_valueTo="200"
android_valueType="floatType"
android_propertyName="y"
android_repeatCount="1"
android_repeatMode="reverse"/>
Para ver como colocar em código, siga para os exemplos abaixo.
Exemplos rápidos de ObjectAnimator
1. Como entrar e sair de uma visão usando o ObjectAnimator
Nosso objetivo é criar métodos que nos permitam entrar e sair.
Primeiro vamos criar uma interface 'AnimationListener':
public interface AnimationListener {
/**
* We need to make our View visible
* before fade in animation starts
*/
interface OnAnimationStartListener{
void onAnimationStart();
}
/**
* We need to make View invisible
* after fade out animation ends.
*/
interface OnAnimationEndListener{
void onAnimationEnd();
}
}
Você pode ver que é uma interface com duas assinaturas de método: onAnimationStart()
e onAnimationEnd()
.
Então aqui está o método que se desvanece em uma visão:
/**
* View will appear on screen with
* fade in animation. Notifies onAnimationStartListener
* when fade in animation is about to start.
*
* @param view
* @param duration
* @param onAnimationStartListener
*/
public static void animateFadeIn(View view, long duration, final AnimationListener.OnAnimationStartListener onAnimationStartListener) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);
objectAnimator.setDuration(duration);
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
if (onAnimationStartListener != null)
onAnimationStartListener.onAnimationStart();
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
objectAnimator.start();
}
Iniciamos o ObjectAnimator
invocando o método estático ofFloat()
.
Definimos então a duração, que recebemos através de nosso método como um parâmetro. Para definir a duração, utilizamos o método "SetDuration()setDuration()
.
Em seguida, adicionamos nosso AnimatorListener', onde invocamos nosso método personalizado
AnimationListener.onAnimationStart() dentro do método
onAnimationStart() da classe
android.animation.Animator'.
Então, o que dizer do desvanecimento?
bem agan utilizamos a classe ObjectAnimator'. A diferença é que desta vez estamos invocando o
onAnimationEnd() a partir de nossa interface personalizada
AnimationListener e o fazemos dentro do pacote
Animator.OnAnimationEnd()do pacote
android.animation`.
/**
* View will disappear from screen with
* fade out animation. Notifies onAnimationEndListener
* when fade out animation is ended.
*
* @param view
* @param duration
* @param onAnimationEndListener
*/
public static void animateFadeOut(View view, long duration, final AnimationListener.OnAnimationEndListener onAnimationEndListener) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 1, 0);
objectAnimator.setDuration(duration);
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
if (onAnimationEndListener != null)
onAnimationEndListener.onAnimationEnd();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
objectAnimator.start();
}