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.