Chromium Chronicle #33: Views AnimationBuilder

استفاده از انیمیشن های مبتنی بر لایه در Views می تواند عملکرد را بهبود بخشد و jankiness را کاهش دهد، اما تنظیم آنها نسبتاً دشوار است. کلاس های 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 ایمیل بزنید.