Chromium Chronicle #33: AnimationBuilder de visualizações

Usar animações baseadas em camadas nas visualizações pode melhorar o desempenho e reduzir instabilidade, mas elas são bem difíceis de configurar. A AnimationBuilder podem reduzir consideravelmente a complexidade e melhorar a legibilidade das camadas animações.

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

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

Veja 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? E o mais importante: AnimationBuilder não acrescenta sobrecarga extra à animação, pois se destina a simplificar a criação de animações baseadas em camadas. Experimente da próxima vez que precisar animar algo.

Para receber mais ajuda, envie um e-mail chromium-dev@chromium.org (em inglês).