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 les à-coups, mais elles sont plutôt difficiles à configurer. Les classes AnimationBuilder peuvent considérablement réduire la complexité et améliorer la lisibilité des animations de couche.

Supposons que vous ayez besoin d'animer un fondu croisé continu entre les deux vues suivantes, comme dans l'image ci-dessous.

Voici un exemple 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 en utilisant AnimationBuilder. L'animation démarre lorsque l'utilisateur quitte le 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 il est destiné à simplifier la création d'animations basées sur des calques. Essayez la prochaine fois que vous aurez besoin d'animer quelque chose.

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