Um die standardmäßige Fade Animation zwischen zwei Aktivitäten (activities) auszutauschen muss man die Aktivitäten zu erst mittels Animationsbeschreibung in XML definieren.Diese Dateien sollten unter res/anim/ abgelegt werden. Hier nun die vier Animationen die man für einen horizontalen Wechsel der Ansichten benötigt:
Bewegung der Ansicht nach rechts raus (slide_to_right.xml) :
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="500" /> </set>
Bewegung der Ansicht von rechts rein (slide_from_right.xml) :
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="100%" android:toXDelta="0" android:fromYDelta="0%" android:toYDelta="0%" android:duration="500" /> </set>
Bewegung der Ansicht nach links raus (slide_to_left.xml) :
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="-100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="500" /> </set>
Bewegung der Ansicht von links rein (slide_from_left.xml) :
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="-100%" android:toXDelta="0" android:fromYDelta="0%" android:toYDelta="0%" android:duration="500" /> </set>
Damit die Animation nun beim wechsel zu einer neuen Aktivitätsansicht angezeigt wird kann man die standard Animationen mit folgendem Befehl überschreiben:
public void onClick(View v) { Intent i = new Intent(getApplicationContext(), SecondActivity.class); startActivity(i); overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left); }
In dem Beispiel würde das Fenster nach links herausgeschoben und das neue kommt parallel von rechts herein.
Beim verlassen der zweiten Aktivität muss man nun die Animation so umschreiben dass das Fenster nach rechts rausfliegt und die alte Ansicht von links hereinkommt. Dazu ruft man nach dem finish() Aufruf wieder folgenden Befehl auf:
finish(); overridePendingTransition(R.anim.slide_from_left, R.anim.slide_to_right);
Eine Vertikale Animation kann über entsprechende Werte in den XML Dateien erreicht werden. Über den Wert bei duration kann die Geschwindigkeit der Animation festgelegt werden.