在 View 中使用基于层的动画可以提高性能并减少
但设置起来比较困难通过
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。