Beenden der Animation funktioniert nicht; Die benutzerdefinierte Animation von FragmentTransaction funktioniert nicht für Ausblenden

8

Ich verwende show / hide, um ein Fragment anzuzeigen, das einen Teil des Bildschirms einnimmt. Aus irgendeinem Grund wird beim Abspielen des Fragments die slide_in_left -Animation abgespielt, aber wenn das Fragment ausgeblendet wird, gibt es keine Animation, das Fragment verschwindet einfach. Ich habe versucht, die slide_in_left -Animation für exit und enter zu verwenden, das hat nicht geholfen. Wenn der Code in das Support-Paket geschrieben wird, wird die Animation erstellt und der Code für die Anzeige wird ausgeführt. (Ich habe den .hide -Aufruf verfolgt)

%Vor%

Nur für den Fall, hier ist das XML für die slide_out_left Animation

%Vor%

Bearbeiten: Es ist möglich, dass das Problem damit zu tun hat, dass my_fragment die Bildschirmbreite mit einem anderen Fragment teilt, das eine Webansicht enthält. Wenn .show für my_fragment ausgeführt wird, wird es sichtbar und teilt Speicherplatz innerhalb eines horizontalen linearen Layouts (wie viel Bildschirmbreite jedes der beiden Fragmente benötigt wird, wird durch den Gewichtsparameter bestimmt).

    
Leo K 10.12.2012, 21:55
quelle

4 Antworten

3

Persönlich für mich ist das ein Fehler in der zPosition für Fragment Animationen.

Was Sie sehen, ist, dass das neue Fragment "erscheint", weil das neue Fragment unterhalb des aktuellen Fragments hängt.

Wenn Sie also versuchen, ein Fragment 'Over the top' eines vorhandenen Fragments zu animieren, scheint es so, als würde nichts passieren, dann erscheint das neue einfach.

Ich habe viele Arbeitsumgebungen ausprobiert, mit zPosition gespielt (betrifft nur Windows nicht Layouts, also keinen Effekt auf Fragmente), onAnimationCreate() bringt das Root-Layout nach vorne oder sogar beim Starten und Stoppen der Animation ... scheint nichts zu tun .

Also, zu diesem Zeitpunkt, ohne eine vollständige benutzerdefinierte Animation für Fragmentübergänge zu schreiben, sind sie im Moment ein bisschen fehlerhaft.

Vielleicht musst du damit spielen. .add(Fragment) wartet darauf, dass es hinzugefügt wird, dann ruft .remove(Fragment) das alte Fragment auf, so dass das neue Fragment physisch über dem vorhandenen Fragment platziert wird.

    
Chris.Jenkins 20.02.2013, 10:55
quelle
18

Versuchen Sie zu verwenden setCustomAnimations (int eingeben, int beenden, int popEnter, int popExit) Anstatt von setCustomAnimations (int enter, int exit) Wenn Sie Popupbackstack aufrufen, wird die Exit-Animation nicht aufgerufen

    
Amlan 26.09.2014 06:24
quelle
1

Ich denke, es hatte die gleiche Situation, die sich ergibt:

Ich habe N Fragmente und wollte eine benutzerdefinierte Animation haben, aber ich wollte die Fragmente nicht neu laden, also war add und remove oder replace keine Lösung und mit show / hide Ich konnte die Animation nicht zwischen zwei Fragmenten synchronisieren.

Um es zu beheben, musste ich ein FrameLayout für jedes Fragment verwenden.

Hier der Code.

%Vor%

Um zu steuern, welches Fragment angezeigt werden soll:

%Vor%

Der Schlüssel befindet sich in bringToFront

Ich hoffe, es war hilfreich!

    
Julián Falcionelli 15.05.2017 20:38
quelle
-4

Ich konnte die Ausgangsanimation mit .replace anstelle von .add

arbeiten lassen %Vor%     
Ero 02.03.2014 22:03
quelle