Chromium Chronicle #33:视图 AnimationBuilder

在 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