Chromium Chronicle Nr. 33: Views AnimationBuilder

Die Verwendung von ebenenbasierten Animationen in Ansichten kann die Leistung verbessern und Verzögerungen reduzieren. Die Einrichtung ist jedoch eher schwierig. Die AnimationBuilder-Klassen können die Komplexität erheblich reduzieren und die Lesbarkeit von Ebenenanimationen verbessern.

Angenommen, Sie müssen einen fortlaufenden Überblendungsvorgang zwischen den folgenden beiden Ansichten animieren, wie in der folgenden Abbildung.

Im Folgenden finden Sie ein Beispiel dafür, wie dies direkt mit den Layer Animation APIs erreicht werden kann.

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

Im Folgenden wird gezeigt, wie Sie mit AnimationBuilder denselben Effekt erzeugen. Die Animation beginnt, sobald Sie den Bereich verlassen.

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

Welchen Code würdest du lieber schreiben oder lesen? Noch wichtiger ist, dass AnimationBuilder keinen zusätzlichen Aufwand in die Animation einfügt, da die Erstellung von ebenenbasierten Animationen vereinfacht werden soll. Probieren Sie es einfach aus, wenn Sie das nächste Mal etwas animieren müssen.

Wenn Sie weitere Hilfe benötigen, senden Sie eine E-Mail an chromium-dev@chromium.org.