Sliding-Layer-Aktivitätsanimation android

8

Ich möchte eine Gleitschicht-Animation für den Aktivitätsübergang implementieren, wie in den Material-Design-Richtlinien beschrieben.

Alles, was ich bisher tun konnte, ist jedoch eine einfache Kombination von slide_in und stay-Animation, die mir keinen Effekt in Form von gestapelten Ebenen verleiht. Wie kann ich es erreichen?

Meine aktuelle Implementierung:

Aktivitätsstart:

%Vor%

Beim Schließen der Aktivität:

%Vor%

slide_in_right.xml:

%Vor%

slide_out_right.xml:

%Vor%

stay.xml:

%Vor%     
gauravsapiens 15.12.2014, 11:19
quelle

2 Antworten

6

Ich habe endlich eine Lösung für diese Frage gefunden. Es funktioniert einwandfrei.

Die wichtigen Komponenten in dieser Antwort:

  • BackActivity = Hintergrundaktivität
  • FrontActivity = Aktivität, die nach vorne gleitet
  • BackgroundView = die Basis ViewGroup in Ihrer FrontActivity

Die Lösung besteht darin, das Layout von FrontActivity vor dem Schließen von FrontActivity zu animieren. Dies ist nur möglich, wenn Sie eine in Ihr Layout integrierte Symbolleiste als Aktionsleiste verwenden!

Ich werde meinen Code hier kopieren. Meine Animation ist eine Aktivität, die von unten nach vorne gleitet und verschwindet wieder vor der vorherigen Aktivität. Sie können diesen Effekt leicht in jede Richtung erhalten, indem Sie nur die Animationen ändern.

1) Schieben Sie FrontActivity in über BackActivity
Rufen Sie einfach overridePendingTransition auf, wenn Sie FrontActivity von BackActivity starten.

%Vor%

slide_in_bottom.xml

%Vor%

2) Wenn Sie von FrontActivity zu BackActivity zurückkehren, animieren Sie das Layout von FrontActivity, bevor Sie FrontActivity schließen!

Ich habe dies getan, indem ich die folgende Methode in meinem onOptionsSelected() und meinem onBackPressed() in FrontActivity

aufgerufen habe %Vor%

slide_out_bottom.xml

%Vor%

3) Jetzt müssen wir sicherstellen, dass BackActivity hinter FrontActivity sichtbar ist, wenn es animiert.
Wir müssen dafür mit transparenten Themen arbeiten.

styles.xml

%Vor%

4) Wenden Sie das transparente Thema auf FrontActivity in Ihrem Manifest an:

AndroidManifest.xml

%Vor%

5) Da Ihre Aktivität jetzt transparent ist, müssen Sie BackgroundView einen Hintergrund hinzufügen. Die Standardhintergründe sind:

%Vor%

front_activity.xml

%Vor%

Das ist es. Die Animation sollte jetzt funktionieren.

BEARBEITEN

Ich habe eine Lösung gefunden, die nicht flackert. Die Animation sieht einwandfrei aus.

Wenn Sie FrontActivity schließen, rufen Sie finish anstelle von NavUtils.navigateUpFromSameTask(activity) auf. Ich habe das in meiner Antwort geändert.

    
Robbe 13.01.2015 01:39
quelle
4

Sie können das beschriebene Verhalten erhalten, indem Sie einfach den Übergang zwischen den Aktivitäten überschreiben. Ich habe auch einen Fade-Shrink-Effekt auf die Rückenaktivität, um das Aussehen zu verbessern:

slide_in_right.xml

%Vor%

slide_out_right.xml

%Vor%

fade_back.xml

%Vor%

fade_forward.xml

%Vor%

ParentActivity.java

In einer Elternklasse, die für Ihre Aktivitäten üblich ist, können Sie Ihren wiederverwendbaren Code einschließen:

%Vor%

Dann beim Aktivitätsstart:

%Vor%

Für den Rückübergang:

%Vor%     
AlexGuti 12.02.2015 12:58
quelle