Chromium Chronicle n.° 33: Views AnimationBuilder

El uso de animaciones basadas en capas en Views puede mejorar el rendimiento y reducir pero son bastante difíciles de configurar. El AnimationBuilder pueden reducir en gran medida la complejidad y mejorar la legibilidad de las capas animaciones.

Supongamos que necesitas animar un encadenado continuo entre los siguientes dos: como se muestra en la siguiente imagen.

Este es un ejemplo de cómo podría hacerse esto usando directamente las APIs de LayerAnimation.

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

A continuación, se muestra cómo crear el mismo efecto con AnimationBuilder. La animación comienza cuando sales del alcance.

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

¿Qué código preferirías escribir o leer? Más importante aún, AnimationBuilder no agrega sobrecarga adicional a la animación, ya que está diseñada para simplificar la la creación de animaciones basadas en capas. Pruébala la próxima vez que necesites hacerlo animar algo.

Para obtener ayuda adicional, envía un correo electrónico a chromium-dev@chromium.org.