Was ist die aktuelle, neue Alternative zu ViewAnimator?

9

Hintergrund

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.

Das Problem

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.

Was ich versucht habe

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.

Die Fragen

  1. Was hat ViewAnimator abgelöst? Spricht er von Übergängen?

  2. Was sind die Vor- und Nachteile im Vergleich zu ViewAnimator?

  3. Wie wäre ein ViewAnimator mit einigen Ansichten in die neuere Lösung konvertiert, einschließlich der Umschaltung zwischen den Zuständen?

android developer 07.02.2018, 10:34
quelle

3 Antworten

0

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%     
android developer 05.03.2018, 10:11
quelle
1

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.

    
azizbekian 26.02.2018 12:04
quelle
0

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.

    
fishbone 26.02.2018 12:51
quelle