2016-12-31 8 views
0

Ich möchte eine benutzerdefinierte Pre-Lollipop Übergang implementieren. Ich habe ein gemeinsames Element in beiden Aktivitäten (A und B), das ist eine einfache ImageView. Meine benutzerdefinierten Übergänge mit gemeinsam genutzten Elementen funktionieren nach dem gleichen Prinzip wie native Übergänge. Zuerst setze ich den Hintergrund der Aktivität B auf transparent, dann erfasse ich den Startzustand des gemeinsamen Elements und übergebe diese Daten an die Aktivität B. In B ich den Endzustand der freigegebenen Ansicht erfassen und erstellen Sie eine Animator, die die Ansicht zwischen den beiden Zuständen animieren wird, natürlich, dass Animation in B Aktivität passiert.
Wie behandelt man Rücksprung mit geteilten Elementen?

An diesem Punkt, solange ich das gleiche gemeinsame Element in beiden Aktivitäten habe, ist alles perfekt, und ich bin in der Lage, angemessene Rückkehr Übergang anzuwenden. Wenn ich jedoch eine Art von Galerie implementieren möchte (wenn Sie Bilder in der Aktivität B nach links und rechts schieben können), habe ich ein Problem mit dem Rückkehrübergang. In diesem Fall teilen sich beide Aktivitäten die gleiche Datenquelle, sodass der Benutzer einfach das freigegebene Element in der Aktivität B ändern kann. Was passiert, wenn ich das geteilte Element in der zweiten Aktivität ändere? Dann, um Return-Übergang zu implementieren, muss ich natürlich die Größe und Position dieses Elements in A Aktivität, richtig?

Grundsätzlich haben wir nur 2 Szenarien (korrigieren Sie mich, wenn ich falsch liege), dies zu tun:

  • Führen Sie den Zustand dieses gemeinsamen Elements B-A Aktivität onActivityResult Rückruf verwenden und anwenden die Rückkehranimation in A.
  • Irgendwie bekommen Sie die Eigenschaften des gemeinsamen Elements von A Aktivität und implementieren Sie die Rückkehr Animation in B.

Außerdem habe ich auch eine RecyclerView neu zu zeichnen oder was auch immer das hält die Daten requestLayout() oder invalidate() Methode.

Ich weiß, dass ich all diese Sachen mit native Übergängen mit SharedElementCallback Callback und onActivityReenter() Methode implementieren kann. Dieses Framework behandelt diesen Rückübergang in der aufgerufenen Aktivität, nicht im Aufrufer, irgendwie.

Also, ich frage mich, ob es eine Alternative gibt?

Antwort

0

Endlich habe ich eine Antwort auf meine Frage gefunden. Wie ich später sagte, haben wir nur zwei Szenarien, also habe ich das zweite implementiert. In diesem Fall können wir ein Veröffentlichungs-/Subskribierungsmuster anwenden, wodurch es möglich wird, die Daten aus der ersten Aktivität abzurufen und die angeforderten Daten an die zweite Aktivität zu senden. Solange ich die entsprechenden Daten in der zweiten Aktivität habe, kann ich das Bild wieder auf seine Position in der ersten Aktivität animieren.

Um das Publish-Subscribe-Muster zu implementieren, habe ich Otto verwendet, einen Event-Bus, der einen Mechanismus bereitstellt, mit dem Sie mit verschiedenen Teilen Ihrer Anwendung kommunizieren können.

Sie können die Implementierung dieser Idee here finden. Sie können dort auch ein Beispiel für die Verwendung von nativen Übergängen finden.

Verwandte Themen