Antworten:
Sie können dies mit tun Activity.overridePendingTransition()
. Sie können einfache Übergangsanimationen in einer XML-Ressourcendatei definieren.
onCreate
Funktion Ihrer Aktivität tun .
Hier ist der Code für eine schöne, gleichmäßige Überblendung zwischen zwei Aktivitäten.
Erstellen Sie eine Datei mit dem Namen fadein.xml
inres/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />
Erstellen Sie eine Datei mit dem Namen fadeout.xml
inres/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />
Wenn Sie von Aktivität A zu Aktivität B wechseln möchten, geben Sie Folgendes in die onCreate()
Methode für Aktivität B ein . Vorher setContentView()
arbeitet für mich.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Wenn die Überblendungen für Sie zu langsam sind, ändern Sie android:duration
die obigen XML-Dateien in etwas Kleineres.
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
Wenn Sie diese Dateien anzeigen, erhalten Sie möglicherweise auch Hinweise, wie Sie Ihre benutzerdefinierten Animationen verbessern können (z. B. indem das Einblenden länger dauert als das Ausblenden).
fadein
und fadeout
zu fade_in
und fade_out
. Von Dan Js Post
overridePendingTransition()
direkt nach dem Anruf finish()
und / oder anrufen startActivity()
. Auf diese Weise konnte ich eine schöne Überblendung erzielen, indem ich sie direkt nach dem Start der neuen Aktivität aufrief.
Eine noch einfachere Möglichkeit ist:
<style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style>
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style>
Das ist es :)
Ja. Sie können dem Betriebssystem mitteilen, welche Art von Übergang Sie für Ihre Aktivität wünschen.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
Wobei ANIMATION eine Ganzzahl ist, die sich auf eine im Betriebssystem integrierte Animation bezieht.
Erstelle res> anim> fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
Erstelle res> anim> fadeout.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
In res> values> styles.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
In Aktivitäten onCreate ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Eine Liste der Standardanimationen finden Sie unter: http://developer.android.com/reference/android/R.anim.html
Es gibt in der Tat fade_in
und fade_out
für API Level 1 und höher.
Ich überschreibe meine Standardaktivitätsanimation. Ich teste es in API 15, dass es reibungslos funktioniert. Hier ist die Lösung, die ich benutze:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>
<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>
Erstellen Sie einen Animationsordner unter dem Ordner res und erstellen Sie dann diese vier Animationsdateien:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
Sie können mein Beispielprojekt herunterladen .
Das ist alles... :)
Hier ist der Code, um eine schöne Glättung zwischen zwei Aktivitäten durchzuführen.
sanfter Effekt von links nach rechts
Erstellen Sie eine Datei mit den Namen slide_in_right.xml und slide_out_right.xml in res / anim
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" />
<alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/>
<alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>
sanfter Effekt von rechts nach links
Erstellen Sie in res / anim eine Datei mit den Namen animation_enter.xml und animation_leave.xml
animation_enter.xml
<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="700"/>
</set>
animation_leave.xml
<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="700" />
</set>
Navigieren Sie von einer Aktivität zur zweiten Aktivität
Intent intent_next=new Intent(One_Activity.this,Second_Activity.class);
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
startActivity(intent_next);
finish();
4. Drücken Sie auf Ereignis zurück oder navigieren Sie von der zweiten Aktivität zu einer Aktivität
Intent home_intent = new Intent(Second_Activity.this, One_Activity.class);
overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave);
startActivity(home_intent);
finish();
overridePendingTransition
sofort nach startActivity anrufen: developer.android.com/reference/android/app/…
Sie können overridePendingTransition in Android 1.5 nicht verwenden. overridePendingTransistion wurde für Android 2.0 bereitgestellt.
Wenn Sie dies ohne Fehler durchlaufen möchten, müssen Sie mit den normalen Animationen (oder Ihren eigenen) für das Ziel (1.5 oder höher) kompilieren oder mit overridePendingTransistion für das Ziel (2.0 oder höher) kompilieren.
Zusammenfassung: Sie können overridePendingTransistion in Android 1.5 nicht verwenden .
Sie können jedoch die im Betriebssystem integrierten Animationen verwenden.
IN GALAXY Geräte:
Sie müssen sicherstellen, dass Sie es im Gerät nicht über Einstellungen> Entwickleroptionen deaktiviert haben:
Verwenden Sie die ActivityCompat.startActivity () -Arbeits-API> 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Einige Versionen von Android unterstützen benutzerdefinierte Activity
Übergänge, andere nicht (ältere Geräte). Wenn Sie benutzerdefinierte Übergänge verwenden möchten, sollten Sie überprüfen, ob Activity
die overridePendingTransition()
Methode vorhanden ist, wie dies bei älteren Versionen nicht der Fall ist.
Um festzustellen, ob die Methode vorhanden ist oder nicht, kann die Reflection-API verwendet werden. Hier ist der einfache Code, der die Methode überprüft und zurückgibt, falls vorhanden:
Method mOverridePendingTransition;
try {
mOverridePendingTransition = Activity.class.getMethod(
"overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
/* success */
} catch (NoSuchMethodException nsme) {
/* failure, this version of Android doesn't have this method */
}
Und dann können wir unseren eigenen Übergang anwenden, dh diese Methode verwenden, falls vorhanden:
if (UIConstants.mOverridePendingTransition != null) {
try {
UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Hier wurden als Beispiel einfache Ein- und Ausblendanimationen für die Übergangsdemonstration verwendet.
Animation verkleinern
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();
zoom_enter
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
zoom_exit
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
overridePendingTransition
unten stehenden Antworten: Sie können bestehen,(0, 0)
wenn Sie überhaupt keine Animation wünschen.