Je commence une activité et je préférerais avoir un fondu alpha pour startActivity()
et un fondu sortant pour la finish()
. Comment puis-je m'y prendre dans le SDK Android?
Dans la même instruction dans laquelle vous exécutez finish (), exécutez également votre animation. Ensuite, dans la nouvelle activité, lancez 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 ta 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 à celle que j'ai écrite avec runFadeAnimation, puis vous l'exécutez dans onCreate sans oublier de changer l'ID des ressources en fadeout.
À partir du niveau 5 de l'API, vous pouvez appeler immédiatement overridePendingTransition 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 Android:windowAnimationStyle
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>
Utilisez 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-le uniquement après super.onCreate (savedInstanceState) dans votre nouveau Classe d'activité. 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);
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 que vous voulez.
Si vous voulez 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);
}
}