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ätonActivityResult
Rückruf verwenden und anwenden die Rückkehranimation inA
. - Irgendwie bekommen Sie die Eigenschaften des gemeinsamen Elements von
A
Aktivität und implementieren Sie die Rückkehr Animation inB
.
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?