Je commence une activité et je préférerais avoir un fondu d'entrée alpha pour startActivity()
et un fondu arrière pour le finish()
. Comment puis-je y parvenir dans le SDK Android?
Je commence une activité et je préférerais avoir un fondu d'entrée alpha pour startActivity()
et un fondu arrière pour le finish()
. Comment puis-je y parvenir dans le SDK Android?
Réponses:
Dans la même instruction dans laquelle vous exécutez finish (), exécutez également votre animation. Ensuite, dans la nouvelle activité, exécutez une autre animation. Voir ce code:
fadein.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<alpha android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="500"/> //Time in milliseconds
</set>
Dans votre classe d'arrivée
private void finishTask() {
if("blabbla".equals("blablabla"){
finish();
runFadeInAnimation();
}
}
private void runFadeInAnimation() {
Animation a = AnimationUtils.loadAnimation(this, R.anim.fadein);
a.reset();
LinearLayout ll = (LinearLayout) findViewById(R.id.yourviewhere);
ll.clearAnimation();
ll.startAnimation(a);
}
fadeout.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<alpha android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="500"/>
</set>
Dans votre nouvelle classe Activity, vous créez une méthode similaire comme runFadeAnimation que j'ai écrite, puis vous l'exécutez dans onCreate et n'oubliez pas de changer l'id des ressources en fadeout.
android:duration="@android:integer/config_shortAnimTime"
runFadeAnimation()
À partir du niveau d'API 5, vous pouvez appeler overridePendingTransition immédiatement pour spécifier une animation de transition explicite:
startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);
ou
finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);
Voir les thèmes sur Android: http://developer.android.com/guide/topics/ui/themes.html .
Sous themes.xml, il devrait y avoir un android:windowAnimationStyle
endroit où vous pouvez voir la déclaration du style dans styles.xml .
Exemple d'implémentation:
<style name="AppTheme" parent="...">
...
<item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>
</style>
<style name="WindowAnimationStyle">
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
@android:anim/fade_in
partir du code java?
Utilisation overridePendingTransition
startActivity();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<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" />
</set>
fadeout.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/anticipate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
</set>
Pour fadeIn et fadeOut , ajoutez ceci uniquement après super.onCreate (savedInstanceState) dans votre nouvelle classe Activity. Vous n'avez pas besoin de créer autre chose (pas de XML, pas de dossier anim, pas de fonction supplémentaire).
overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);
Si vous souhaitez toujours la même animation de transition pour l'activité
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
@Override
protected void onPause() {
super.onPause();
if (isFinishing()) {
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
}
Vous pouvez simplement créer un contexte et faire quelque chose comme ci-dessous: -
private Context context = this;
Et votre animation: -
((Activity) context).overridePendingTransition(R.anim.abc_slide_in_bottom,R.anim.abc_slide_out_bottom);
Vous pouvez utiliser n'importe quelle animation de votre choix.
Je voulais utiliser la solution styles.xml, mais cela ne fonctionnait pas pour moi avec les activités. Il s'avère qu'au lieu d'utiliser android:windowEnterAnimation
et android:windowExitAnimation
, je dois utiliser les animations d'activité comme celle-ci:
<style name="ActivityAnimation.Vertical" parent="">
<item name="android:activityOpenEnterAnimation">@anim/enter_from_bottom</item>
<item name="android:activityOpenExitAnimation">@anim/exit_to_bottom</item>
<item name="android:activityCloseEnterAnimation">@anim/enter_from_bottom</item>
<item name="android:activityCloseExitAnimation">@anim/exit_to_bottom</item>
<item name="android:windowEnterAnimation">@anim/enter_from_bottom</item>
<item name="android:windowExitAnimation">@anim/exit_to_bottom</item>
</style>
// CREATE anim
// CREATE animation,animation2 xml // animation like fade out
Intent myIntent1 = new Intent(getApplicationContext(), Attend.class);
Bundle bndlanimation1 = ActivityOptions.makeCustomAnimation(getApplicationContext(),
R.anim.animation, R.anim.animation2).toBundle();
tartActivity(myIntent1, bndlanimation1);
La plupart des réponses sont assez correctes, mais certaines d'entre elles sont obsolètes, comme lors de l'utilisation de R.anim.hold et certaines d'entre elles ne font qu'élaborer le processus.
Ainsi, vous pouvez utiliser:
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);