Désactiver l'animation de diapositives d'activité lors du lancement d'une nouvelle activité?

140

J'ai une activité qui lance une autre activité, via un clic de bouton. Par défaut, sur les nouvelles versions du système d'exploitation d'Android, le système d'exploitation animera la nouvelle activité en glissant de droite à gauche.

Existe-t-il un moyen de désactiver cette animation? Je veux juste que la nouvelle activité apparaisse sans aucune sorte d'animation.

user246114
la source

Réponses:

190

Le FLAG_ACTIVITY_NO_ANIMATIONdrapeau fonctionne bien pour désactiver l'animation lors du démarrage des activités.

Pour désactiver l'animation similaire qui est déclenchée lors de l'appel finish()sur une activité, c'est-à-dire les diapositives d'animation de droite à gauche à la place, vous pouvez appeler overridePendingTransition(0, 0)après l'appel finish()et l'animation suivante sera exclue.

Cela fonctionne également sur l'animation si vous appelez overridePendingTransition(0, 0)après l'appel startActivity(...).

Mattias
la source
9
Notez que FLAG_ACTIVITY_NO_ANIMATIONet overridePendingTransitionsont tous les deux de niveau API 5+ uniquement.
azdev
Cela n'aide pas lorsque vous revenez d'une activité en appuyant sur la touche Retour.
Yar
4
Tu es le meilleur. overridePendingTransition (0, 0) -> est divin. Il remplace uniquement l'animation finish (), mais pas l'animation déclenchée lors de la reprise de l'activité précédente.
Philipp Jahoda
1
Je n'aime pas cette réponse car elle ne couvre pas les transitions provoquées en appuyant sur les touches programmables «retour». OP demande comment `` désactiver '' l'animation, et non `` dire sélectivement à l'application de ne pas la lire ''
1owk3y
3
Si vous souhaitez également désactiver ou remplacer l'animation "back", remplacez la méthode finish () dans votre activité et placez cet appel là-dedans avec un appel à super.finish (). Problème résolu.
Grishka
171

IMHO cette réponse ici résout le problème de la manière la plus élégante.

Le développeur doit créer un style ,

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>

puis dans le manifeste, définissez-le comme thème d'activité ou d'application entière.

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

Voila! Sympa et facile.

crédits ps à l'auteur original s'il vous plaît ..

Ewoks
la source
1
Cela ne fonctionne pas pour Back, et cela change l'apparence de la barre de titre (cela la rend petite) ...
Marek
êtes-vous sûr que vous n'avez pas ajouté d'autres propriétés dans le style, car personne d'autre n'a signalé cet "effet" que vous mentionnez ..
Ewoks
Juste pour référence, cela peut poser un problème dans une hiérarchie de vues où vous devez demanderWindowFeature ().
Martin Marconcini
Ce serait bien si vous élaborez un peu, afin d'éviter les problèmes possibles
Ewoks
4
@Marek Je suppose que votre problème ne change pas correctement le parent = "android: Theme". Vous devez le changer avec le thème que vous souhaitez utiliser, en gros ce code désactive simplement l'animation spécifique dans un thème. par exemple, utilisez "Theme.AppCompat.Light.NoActionBar" au lieu de "android: Theme", et vous obtiendrez ce que je veux dire. J'espère que cela aide.
Recomer
33

Appliquer

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

puis

overridePendingTransition(0, 0);

Cela arrêtera l'animation.

Siddharth_Vyas
la source
28

À mon avis, la meilleure réponse est d'utiliser "overridePendingTransition(0, 0);"

pour éviter de voir une animation lorsque vous souhaitez Intentune Activityutilisation:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

et pour ne pas voir l'animation lorsque vous appuyez sur le bouton Retour onPauseMéthode de remplacement dans votrenewactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
Sasa
la source
19

Spécifiez simplement le Intent.FLAG_ACTIVITY_NO_ANIMATIONdrapeau au démarrage

Alexandre Kosenkov
la source
13

Cela fonctionne pour moi lorsque vous désactivez l'animation de fin d'activité.

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
cmcromance
la source
9

Je suis sur 4.4.2, et appeler overridePendingTransition (0, 0) dans onCreate () de l'activité de lancement désactivera l'animation de démarrage (l'appel de overridePendingTransition (0, 0) immédiatement après startActivity () n'a PAS fonctionné). Comme indiqué dans une autre réponse, l'appel de overridePendingTransition (0, 0) après finish () désactive l'animation de fermeture.

Btw, j'ai trouvé que la définition du style avec "android: windowAnimationStyle"> @ null (une autre réponse mentionnée ici) a provoqué un crash lorsque mon activité de lancement a essayé de définir le titre de la barre d'action. En déboguant plus loin, j'ai découvert que cela provoquait l'échec de window.hasFeature (Window.FEATURE_ACTION_BAR) dans initActionBar () de l'activité.

Steve B
la source
1
qu'en est-il d'un CV? activités uniques et tout ça.
Lassi Kinnunen
7

FLAG_ACTIVITY_NO_ANIMATION peut fonctionner, mais cela n'a pas fonctionné pour moi lorsqu'il est combiné avec FLAG_ACTIVITY_CLEAR_TASK et FLAG_ACTIVITY_NEW_TASK. Je vois apparemment l'animation pour créer une nouvelle tâche avec une nouvelle pile d'activités alors que je navigue latéralement vers mes autres vues de niveau supérieur.

Ce qui a fonctionné ici était d'appeler "overridePendingTransition (0, 0);" soit immédiatement après mon appel startActivity () ou le onPause (). Les deux méthodes ont fonctionné, mais le faire après startActivity () me donne un peu plus de contrôle sur quand je veux des animations et quand je ne veux pas.

Wookie
la source
2

J'ai eu un problème similaire pour obtenir un écran noir lors de la transition glissante d'une activité à une autre en utilisant overridependingtransition. et j'ai suivi le chemin ci-dessous et cela a fonctionné

1) a créé un noanim.xmldans le dossier 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="0%p" />

et utilisé

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

Le premier paramètre comme mon animation originale et le deuxième paramètre qui est l'animation de sortie comme mon animation factice

Karthika PB
la source
1

Afin d'éviter l'arrière - plan noir lors du démarrage d' une activité déjà dans la pile, j'ai ajouté overridePendingTransition(0,0)dans onStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

}
Alex Huiculescu
la source