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.

Animação de bitmaps do Android

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:

  1. mover.
  2. revelar.
  3. hideviews.Para isso você pode utilizar o sistema de animação da propriedade fornecido pelo pacote android.animation. Este pacote está disponível em Android 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();
    }

Categorized in: