Chromium Chronicle n.° 33: Views AnimationBuilder

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

Supongamos que necesitas animar un fundido cruzado continuo entre las siguientes dos vistas, como en la siguiente imagen.

Este es un ejemplo de cómo se puede hacer esto usando directamente las APIs de Animation de capas.

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? Lo más importante es que AnimationBuilder no agrega sobrecarga adicional a la animación, ya que está diseñado para simplificar la creación de animaciones basadas en capas. Pruébalo la próxima vez que necesites animar algo.

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