Ich habe ViewAnimator / ViewSwitcher für eine lange Zeit.
Der häufigste Anwendungsfall, den ich hatte, war, von Ladephase zu Inhaltsphase oder zwischen den Phasen eines Assistenten zu wechseln und manchmal sogar eine Fehlerphase zu haben.
Als ich vorgeschlagen habe, dem "android-ktx" -Repository eine schöne Erweiterungsfunktion hinzuzufügen ( hier ), wurde mir gesagt:
ViewAnimator ist keine API, die wir aktiv zur Animation von Ansichten empfehlen. Es basiert auf dem alten Animationssystem und wir wollen nicht fördern seine Verwendung in dieser Bibliothek.
Ich habe Artikel von ViewAnimator und ViewSwitcher gelesen, einschließlich der Dokumentation . Es heißt dort nicht, dass es ersetzt / veraltet wurde, oder dass es empfohlen wird, stattdessen etwas anderes zu verwenden.
Was hat ViewAnimator abgelöst? Spricht er von Übergängen?
Was sind die Vor- und Nachteile im Vergleich zu ViewAnimator?
Wie wäre ein ViewAnimator mit einigen Ansichten in die neuere Lösung konvertiert, einschließlich der Umschaltung zwischen den Zuständen?
Ich denke, eine mögliche Alternative ist die Verwendung von ConstraintLayout-Übergängen, wie in hier .
Um es zu implementieren, scheint es, dass es zwei ähnliche Layouts mit denselben IDs für jede Ansicht verwenden muss, und dann können Sie zwischen den Phasen wechseln:
%Vor% Ich nehme an, was Romain Guy bedeutet , ist das ViewAnimator
verwendet Animation
API, während eine neuere API als Animator
gilt . Siehe "Wie sich die Eigenschaftsanimation von der Animation unterscheidet" in den Dokumenten , wo die Vor- und Nachteile der einzelnen APIs sowie Verwendungsszenarien genannt werden:
Das Ansichtsanimationssystem bietet die Möglichkeit, nur View-Objekte zu animieren. Wenn Sie also Nicht-View-Objekte animieren möchten, müssen Sie dazu Ihren eigenen Code implementieren. Das Ansichtsanimationssystem ist auch dadurch eingeschränkt, dass es nur einige Aspekte eines zu animierenden View-Objekts freigibt, wie z. B. die Skalierung und Drehung einer Ansicht, aber nicht die Hintergrundfarbe.
Ein weiterer Nachteil des Ansichtsanimationssystems ist, dass es nur dort modifiziert wurde, wo die Ansicht gezeichnet wurde, und nicht die tatsächliche Ansicht selbst. Wenn Sie beispielsweise eine Schaltfläche animiert haben, um sich über den Bildschirm zu bewegen, wird die Schaltfläche korrekt gezeichnet, aber die tatsächliche Position, an der Sie auf die Schaltfläche klicken können, ändert sich nicht. Daher müssen Sie Ihre eigene Logik implementieren.
Mit dem Eigenschaftsanimationssystem werden diese Einschränkungen vollständig entfernt, und Sie können jede Eigenschaft eines Objekts (Ansichten und Nicht-Ansichten) animieren und das Objekt selbst wird tatsächlich geändert. Das Property-Animation-System ist auch robuster in der Art, wie es Animationen ausführt. Auf einer höheren Ebene weisen Sie den Eigenschaften, die Sie animieren möchten, Animatoren zu, z. B. Farbe, Position oder Größe, und können Aspekte der Animation definieren, z. B. Interpolation und Synchronisierung mehrerer Animatoren.
Das Ansichtsanimationssystem benötigt jedoch weniger Zeit für die Einrichtung und benötigt weniger Code zum Schreiben. Wenn die Ansichtsanimation alles Erforderliche ausführt oder wenn Ihr vorhandener Code bereits so funktioniert, wie Sie möchten, müssen Sie das Eigenschaftsanimationssystem nicht verwenden. Es könnte auch sinnvoll sein, beide Animationssysteme für verschiedene Situationen zu verwenden, wenn der Anwendungsfall auftritt.
Es gibt keine direkte Möglichkeit, " ViewAnimator
in den neueren Ansatz zu konvertieren" , da intern Animation
API verwendet wird. Wie in der Dokumentation erwähnt: "Wenn die Ansichtsanimation alles Erforderliche ausführt oder wenn Ihr vorhandener Code bereits so funktioniert, wie Sie möchten, brauchen Sie das Eigenschaftsanimationssystem nicht zu verwenden" Warum ViewAnimator
nicht veraltet ist.
Versuchen Sie AddrterViewAnimator . AdaprterViewAnimator
benötigt einen Adapter für untergeordnete Sichten, daher kann es schwierig sein, sie als ViewAnimator
zu verwenden, aber es wurden Methoden von ViewAnimator
class wie showNext()
, setInAnimation(ObjectAminator)
und setOutAnimation(ObjectAminator)
benötigt. Ja, Sie müssen alle Animationen manuell in den ObjectAnimator umschreiben.
Tags und Links android android-animation android-view viewswitcher viewanimator