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