Хроники Chromium #33: Просмотры AnimationBuilder

Использование анимации на основе слоев в представлениях может повысить производительность и уменьшить зависания, но их довольно сложно настроить. Классы AnimationBuilder могут значительно упростить и улучшить читаемость анимации слоев.

Предположим, вам нужно анимировать непрерывное плавное затухание между следующими двумя видами, как показано на следующем изображении.

Вот пример того, как это можно сделать напрямую с помощью API-интерфейсов анимации слоев.

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

Ниже показано, как создать тот же эффект с помощью AnimationBuilder . Анимация начинается при выходе из области действия.

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

Какой код вы бы предпочли написать или прочитать? Что еще более важно, AnimationBuilder не добавляет к анимации дополнительных затрат, поскольку предназначен для упрощения создания многослойной анимации. Попробуйте в следующий раз, когда вам понадобится что-то анимировать.

Для получения дополнительной помощи отправьте электронное письмо по адресу chromium-dev@chromium.org .