Chromium Chronicle #33: AnimationBuilder Görüntüleme

Görünümlerde katman tabanlı animasyonlar kullanmak performansı artırabilir ve ancak ayarlanmaları daha zordur. İlgili içeriği oluşturmak için kullanılan AnimationBuilder sınıfları, katmanın karmaşıklığını büyük ölçüde azaltabilir ve animasyonları da ekler.

Aşağıdaki iki trafik kaynağı arasında sürekli bir çapraz geçiş animasyonu oluşturmanız gerektiğini (ör. aşağıdaki resimde olduğu gibi)

Bunun doğrudan katman animasyonu API'leri kullanılarak nasıl yapılabileceğine dair bir örneği aşağıda bulabilirsiniz.

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

Aşağıda, aynı efektin AnimationBuilder kullanılarak nasıl oluşturulacağı gösterilmektedir. Kapsamdan çıkıldığında animasyon başlar.

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

Hangi kodu yazmayı veya okumayı tercih ederdiniz? Daha da önemlisi, AnimationBuilder sadeleştirmeyi amaçladığından animasyona fazladan katman tabanlı animasyonların oluşturulması. Bir dahaki sefere deneyin bir şeye animasyon eklemeliyiz.

Daha fazla yardım için e-posta chromium-dev@chromium.org adresine kaydedilir.