96 votes

Comment réaliser une animation en fondu sur une transition d'activité ?

Je suis en train de codifier un effet de transition entre mon activité logo et mon activité principale, mais j'ai le problème qu'avant de disparaître l'activité se déplace vers le haut :

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <alpha
        android:duration="2000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" >
    </alpha>

</set>

Comment pourrais-je améliorer ce code pour obtenir uniquement un effet de disparition ?

258voto

Philipp Jahoda Points 9277

Vous pourriez créer votre propre Fichiers d'animation .xml pour se fondre dans un nouveau Activity et faire disparaître l'actuel Activity :

fade_in.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" />

fade_out.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:fillAfter="true"
           android:duration="500" />

Utilisez-le dans un code comme celui-là : (Dans votre Activity )

Intent i = new Intent(this, NewlyStartedActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

Le code ci-dessus fera disparaître l'image actuellement active. Activity et s'effacer devant la nouvelle Activity ce qui permet une transition en douceur.

UPDATE : @Dan J a fait remarquer que l'utilisation des animations intégrées d'Android améliore la performance ce qui s'est avéré être le cas après avoir effectué quelques tests. Si vous préférez travailler avec les animations intégrées, utilisez :

overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

Remarquez que je fais référence android.R au lieu de R pour accéder à l'identifiant de la ressource.

UPDATE : Il est désormais courant d'effectuer des transitions en utilisant la fonction Classe de transition introduite dans le niveau 19 de l'API .

27voto

Nikhil Points 409

Je ne fais que réafficher réponse par oleynikd parce que c'est simple et soigné

Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
    android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); 
startActivity(intent, bundle);

Pour animer tout en appuyant sur le bouton retour,

override fun onNavigateUp(): Boolean {
    return super.onNavigateUp()
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
}

override fun onBackPressed() {
    super.onBackPressed()
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)

20voto

Refnhaldy Points 191

Vous pouvez également utiliser ce code dans votre style.xml de sorte que vous n'avez pas besoin d'écrire autre chose dans le fichier activity.java

<!-- 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/colorAccent</item>
    <item name="android:windowAnimationStyle">@style/AppTheme.WindowTransition</item>
</style>

<!-- Setting window animation -->
<style name="AppTheme.WindowTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>

19voto

Enes Points 598

Vous pouvez également ajouter une animation dans votre activité, dans la méthode onCreate comme ci-dessous car overridePendingTransition ne fonctionne pas avec certains mobiles, ou cela dépend des paramètres de l'appareil...

View view = findViewById(android.R.id.content);
Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in);
mLoadAnimation.setDuration(2000);
view.startAnimation(mLoadAnimation);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X