Chromium Chronicle #33: Views AnimationBuilder

L'utilisation d'animations basées sur des calques dans les vues peut améliorer les performances et réduire des à-coups, mais ils sont assez difficiles à configurer. La AnimationBuilder peuvent considérablement réduire la complexité et améliorer la lisibilité des couches des animations.

Supposons que vous deviez animer un fondu enchaîné continu entre les deux comme dans l'image ci-dessous.

Voici un exemple de la façon dont cela peut être fait en utilisant directement les API d'animation des calques.

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());

L'exemple suivant montre comment créer le même effet avec AnimationBuilder. L'animation commence à la sortie du champ d'application.

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);

Quel code préféreriez-vous écrire ou lire ? Plus important encore, AnimationBuilder n'ajoute aucune surcharge supplémentaire à l'animation, car elle vise à simplifier créer des animations basées sur des calques. Essayez la prochaine fois que vous en aurez besoin animer quelque chose.

Pour obtenir de l'aide, envoyez un e-mail chromium-dev@chromium.org.