The Chromium Chronicle n. 33: Visualizzazioni AnimationBuilder

L'utilizzo di animazioni basate su livelli in Visualizzazioni può migliorare il rendimento e ridurre il fastidio, ma sono piuttosto difficili da configurare. Le classi AnimationBuilder possono ridurre notevolmente la complessità e migliorare la leggibilità delle animazioni dei livelli.

Supponiamo che tu debba animare una dissolvenza incrociata continua tra le due visualizzazioni seguenti, come nell'immagine che segue.

Ecco un esempio di come eseguire questa operazione 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 illustrato come creare lo stesso effetto utilizzando AnimationBuilder. L'animazione inizia all'uscita 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? Aspetto ancora più importante, AnimationBuilder non aggiunge alcun sovraccarico all'animazione, in quanto ha lo scopo di semplificare la creazione di animazioni basate su livelli. Provala la prossima volta che hai bisogno di animare qualcosa.

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