De Chromium Chronicle #33: Bekeken AnimationBuilder

Het gebruik van op lagen gebaseerde animaties in Views kan de prestaties verbeteren en schommelingen verminderen, maar ze zijn nogal moeilijk in te stellen. De AnimationBuilder klassen kunnen de complexiteit enorm verminderen en de leesbaarheid van laaganimaties verbeteren.

Stel dat u een continue cross-fade tussen de volgende twee weergaven wilt animeren, zoals in de volgende afbeelding.

Hier is een voorbeeld van hoe dit kan worden gedaan met behulp van de laaganimatie-API's rechtstreeks.

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

Hieronder ziet u hoe u hetzelfde effect kunt creëren met AnimationBuilder . De animatie begint bij het verlaten van de scope.

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

Welke code zou je liever schrijven of lezen? Belangrijker nog is AnimationBuilder geen extra overhead aan de animatie toevoegt, omdat het bedoeld is om het maken van op lagen gebaseerde animaties te vereenvoudigen. Probeer het eens de volgende keer dat je iets moet animeren.

Voor meer hulp kunt u een e-mail sturen naar chromium-dev@chromium.org .