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.
- Documentação do AnimationBuilder (link em inglês)
- Saiba mais sobre a IU do Chromium