Chromium Chronicle #33: AnimationBuilder de visualizações

O uso de animações com base em camadas em visualizações pode melhorar a performance e reduzir a instabilidade, mas elas são difíceis de configurar. As classes AnimationBuilder podem reduzir significativamente a complexidade e melhorar a legibilidade das animações de camadas.

Suponha que você precise animar um cross-fade contínuo entre as duas visualizações a seguir, como na imagem abaixo.

Aqui está um exemplo de como isso pode ser feito usando diretamente as APIs de animação de camada.

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

Confira a seguir como criar o mesmo efeito usando AnimationBuilder. A animação começa ao sair do escopo.

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

Qual código você prefere escrever ou ler? Mais importante ainda, AnimationBuilder não adiciona sobrecarga extra à animação, já que se destina a simplificar a criação de animações baseadas em camadas. Tente fazer isso na próxima vez que precisar de uma animação.

Para receber mais ajuda, envie um e-mail para chromium-dev@chromium.org.