Chromium Chronicle #33: Views AnimationBuilder

Việc sử dụng ảnh động dựa trên lớp trong Khung hiển thị có thể cải thiện hiệu suất và giảm hiện tượng giật nhưng khá khó khăn khi thiết lập. Chiến lược phát hành đĩa đơn AnimationBuilder có thể giúp giảm đáng kể độ phức tạp và cải thiện khả năng đọc cho các lớp ảnh động.

Giả sử bạn cần tạo hiệu ứng làm mờ chéo liên tục giữa hai cụ thể, chẳng hạn như trong hình sau.

Dưới đây là một ví dụ về cách thực hiện việc này bằng cách sử dụng trực tiếp các API ảnh động lớp.

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

Phần sau đây cho biết cách tạo hiệu ứng tương tự bằng AnimationBuilder. Ảnh động bắt đầu khi thoát khỏi phạm vi.

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

Bạn muốn viết hoặc đọc mã nào? Quan trọng hơn, AnimationBuilder không làm tăng thêm chi phí cho ảnh động vì mục đích của nó là đơn giản hoá việc tạo hoạt ảnh dựa trên lớp. Hãy thử tính năng này vào lần tiếp theo bạn cần tạo hiệu ứng cho nội dung nào đó.

Để được trợ giúp thêm, hãy gửi email chromium-dev@chromium.org.