The Chromium Chronicle n. 33: Visualizzazioni AnimationBuilder

L'utilizzo di animazioni basate sui livelli nelle viste può migliorare le prestazioni e ridurre ma sono piuttosto difficili da configurare. La AnimationBuilder le classi possono ridurre notevolmente la complessità e migliorare la leggibilità del livello le animazioni.

Supponiamo di dover animare una dissolvenza incrociata continua tra le due seguenti come mostrato nell'immagine di seguito.

Ecco un esempio di come procedere utilizzando direttamente le API di animazione dei livelli.

auto primary_title_sequence = std::make_unique<LayerAnimationSequence>();
auto working_sequence = std::make_unique<LayerAnimationSequence>();
primary_title_sequence->set_is_repeating(true);
working_sequence->set_is_repeating(true);

primary_title_sequence->AddElement(CreatePauseElement(OPACITY, base::Seconds(2)));
primary_title_sequence->AddElement(CreateOpacityElement(0.0f, base::Seconds(1)));
primary_title_sequence->AddElement(CreatePauseElement(OPACITY, base::Seconds(2)));
primary_title_sequence->AddElement(CreateOpacityElement(1.0f, base::Seconds(1)));

working_sequence->AddElement(CreatePauseElement(OPACITY, base::Seconds(2)));
working_sequence->AddElement(CreateOpacityElement(1.0f, base::Seconds(1)));
working_sequence->AddElement(CreatePauseElement(OPACITY, base::Seconds(2)));
working_sequence->AddElement(CreateOpacityElement(0.0f, base::Seconds(1)));

primary_title_->layer()->GetAnimator()->StartAnimation(primary_title_sequence.release());
working_->layer()->GetAnimator()->StartAnimation(working_sequence.release());

Di seguito viene mostrato come creare lo stesso effetto utilizzando AnimationBuilder. L'animazione inizia quando esci dall'ambito.

AnimationBuilder()
    .Repeatedly()
    .Offset(base::Seconds(2))
    .SetDuration(base::Seconds(1))
    .SetOpacity(primary_title_, 0.0f)
    .SetOpacity(working_, 1.0f)
    .Offset(base::Seconds(2))
    .SetDuration(base::Seconds(1))
    .SetOpacity(primary_title_, 1.0f)
    .SetOpacity(working_, 0.0f);

Quale codice preferiresti scrivere o leggere? Ma soprattutto, AnimationBuilder non aggiunge altro overhead all'animazione in quanto ha lo scopo di semplificare creazione di animazioni basate su livelli. Fai un tentativo la prossima volta che ne hai bisogno animare qualcosa.

Per ulteriore assistenza, invia un'email chromium-dev@chromium.org.