33 Chronicle Chromium: wyświetlenia AnimationBuilder

Użycie animacji opartych na warstwach w widokach danych może poprawić wydajność i ograniczyć obciążenie układu, ale jest ono raczej trudne w konfiguracji. Klasy AnimationBuilder mogą znacznie zmniejszyć złożoność i poprawić czytelność animacji warstw.

Załóżmy, że musisz animować ciągłe przenikanie między dwoma widokami, jak w tym przykładzie.

Oto przykład, jak można to zrobić bezpośrednio za pomocą interfejsów API animacji warstw.

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

Poniżej pokazujemy, jak uzyskać ten sam efekt za pomocą AnimationBuilder. Animacja rozpoczyna się po opuszczeniu zakresu.

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

Który kod wolałbyś napisać lub odczytać? Co ważniejsze, funkcja AnimationBuilder nie wnosi dodatkowych kosztów animacji, ponieważ ma na celu uproszczenie tworzenia animacji opartych na warstwach. Spróbuj to zrobić następnym razem, gdy zechcesz coś stworzyć.

Aby uzyskać dodatkową pomoc, wyślij e-maila na adres chromium-dev@chromium.org.