Ce que j'utilise:
activity_stay.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="0%p"
Android:toYDelta="0%p" />
</set>
activity_slide_to_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:interpolator="@Android:anim/accelerate_decelerate_interpolator">
<translate
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="0"
Android:toYDelta="100%p" />
</set>
activity_slide_from_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:interpolator="@Android:anim/accelerate_decelerate_interpolator">
<translate
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="100%p"
Android:toYDelta="0" />
</set>
Démarrer NewActivity:
startActivity(NewActivity.getIntent(this))
overridePendingTransition(R.anim.activity_slide_from_bottom, R.anim.activity_stay)
NouveauActivité finish ():
finish()
overridePendingTransition(R.anim.activity_stay, R.anim.activity_slide_to_bottom)
Lorsque NewActivity est démarré, OldActivity disparaît - je vois un écran blanc au-dessus duquel NewActivity glisse en haut. Cependant, ce dont j'ai besoin, c’est que ma NewActivity glisse au-dessus du contenu OldActivity une fois démarrée. Comment puis-je atteindre cet objectif?
UPD: lorsque je termine mon NewActivity pour certaines raisons, toutes les animations s'exécutent parfaitement: NewActivity glisse vers le bas et le contenu OldActivity apparaît sous le contenu NewActivity.
Vous pouvez réaliser des animations en utilisant le code ci-dessous:
bottom_up.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="1000"
Android:fromYDelta="90%"
Android:toYDelta="0" />
</set>
bottom_down.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate
Android:duration="1500"
Android:fromYDelta="5"
Android:toYDelta="90%" />
</set>
Nothing.xml:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="1000"
Android:fromYDelta="0%p"
Android:toYDelta="0%p" />
Début de la deuxième activité:
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.bottom_up, R.anim.nothing);
À la fin de la deuxième activité:
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.nothing, R.anim.bottom_down);
}
Docs .:
Commencez une activité en utilisant une animation Les transitions d'activité dans le matériau les applications de conception fournissent des connexions visuelles entre différents états par le mouvement et les transformations entre les éléments communs. Vous pouvez spécifier des animations personnalisées pour les transitions d'entrée et de sortie et pour transitions d'éléments partagés entre les activités.
Une transition d'entrée détermine comment les vues d'une activité entrent le scène. Par exemple, dans la transition d’explosion d’entrée, les vues entrent la scène de l'extérieur et voler vers le centre de la écran. Une transition de sortie détermine la manière dont les vues d'une activité quittent la scène. Par exemple, dans la transition de sortie éclatée, les vues sortent la scène loin du centre.
Spécifier les transitions personnalisées En premier lieu, activer les transitions de contenu de fenêtre avec l’attribut Android: windowActivityTransitions lorsque vous définissez un style qui hérite du thème matériel. Vous pouvez également spécifier entrez, quittez et les transitions d'éléments partagés dans votre définition de style:
<style name="BaseAppTheme" parent="Android:Theme.Material"> <!-- enable window content transitions -->
<item name="Android:windowActivityTransitions">true</item>
<!-- specify enter and exit transitions -->
<item name="Android:windowEnterTransition">@transition/explode</item>
<item name="Android:windowExitTransition">@transition/explode</item> </style>
S'il vous plaît vérifier doc. ici
Prendre plaisir!!
Je pense que l’API Animations est préférable à l’API Transitions pour ce que vous essayez d’accomplir. Voici une explication détaillée: https://www.reddit.com/r/androiddev/comments/8wqjzv/difference_between_animation_and_transitions_api/
Selon la documentation:
public void overridePendingTransition (int enterAnim, int exitAnim) Appelez immédiatement après l'une des variantes de startActivity (Intent) ou finish () pour spécifier une animation de transition explicite à exécuter ensuite.
A partir de Build.VERSION_CODES.JELLY_BEAN, une autre solution consiste à fournir les informations d'animation souhaitées via un ensemble ActivityOptions à startActivity (Intent, Bundle) ou une fonction associée. Cela vous permet de spécifier une animation personnalisée même lorsque vous démarrez une activité en dehors du contexte de l'activité principale actuelle.
Cela implique simplement d’ajouter overridePendingTransition(R.anim.activity_stay, R.anim.activity_slide_to_bottom)
après startActivity(Intent, Bundle)
Doit donner le résultat souhaité.
Modifier:
Android: activityOpenEnterAnimation Android: activityOpenExitAnimation Android: activityCloseEnterAnimation Android: activityCloseExitAnimation
Affecte l'activité
Android: windowEnterTransition Android: windowExitAnimation Android: windowReenterTransition Android: windowReturnTransition
Effets de la fenêtre
Pour plus d'informations sur l'activité vs la fenêtre:
Une activité a une fenêtre (dans laquelle elle dessine son interface utilisateur),
une fenêtre a une surface unique et une hiérarchie de vues attachée,
une surface inclut ViewGroup qui contient les vues.
Source: Qu'est-ce qu'une fenêtre Android?
En conclusion, vous pouvez les utiliser pour obtenir le même résultat mais ils sont différents.
Le meilleur moyen est d'utiliser des styles, car vous n'avez pas à coder dans chaque activité au cas où vous souhaiteriez cette animation dans toutes vos activités.
Le plus court chemin que j'utilise toujours
Pour définir le thème des diapositives dans toutes vos activités
<application
Android:theme="@style/Theme.SlideAnimWindow"
...
>
Pour définir le thème d'une diapositive dans une activité
<activity
Android:name=".YourActivity"
Android:theme="@style/Theme.SlideAnimWindow" />
Mettez slide_from_bottom.xml dans votre res> anim .
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="100%p"
Android:toYDelta="0%p" />
Mettez slide_to_bottom.xml dans votre res> anim .
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="0%p"
Android:toYDelta="100%p" />
Mettez none.xml dans votre res> anim .
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="1000"
Android:fromYDelta="0%p"
Android:toYDelta="0%p" />
Mettez ce style dans res> valeurs> styles.xml
<style name="SlideAnimation" parent="Android:style/Animation.Activity">
<item name="Android:activityOpenEnterAnimation">@anim/slide_from_bottom</item>
<item name="Android:activityOpenExitAnimation">@anim/none</item>
<item name="Android:activityCloseEnterAnimation">@anim/none</item>
<item name="Android:activityCloseExitAnimation">@anim/slide_to_bottom</item>
</style>
<style name="Theme.SlideAnimWindow" parent="AppTheme">
<item name="Android:windowAnimationStyle">@style/SlideAnimation</item>
</style>
Vous pouvez modifier la durée de Android:duration="@Android:integer/config_longAnimTime"
en fonction de vos besoins ..___. Vous êtes prêt à partir.
Essayez ci-dessous,
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="100%p"
Android:toYDelta="0%p" />
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="@Android:integer/config_longAnimTime"
Android:fromYDelta="0%p"
Android:toYDelta="100%p" />
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:duration="1000"
Android:fromYDelta="0%p"
Android:toYDelta="0%p" />
Start NewActivity:
startActivity(NewActivity.getIntent(this))
overridePendingTransition(R.anim.slide_in_up, R.anim.no_anim);
NewActivity finish ():
finish();
overridePendingTransition(R.anim.no_anim, R.anim.slide_out_down);