web-dev-qa-db-fra.com

changement d'activités sans animation

Comment utiliser correctement l'indicateur d'intention FLAG_ACTIVITY_NO_ANIMATION dans le fichier AndroidManifest? Je suppose que mon problème est trivial, mais je ne trouve pas de bon exemple ni de solution.

<intent-filter>
    <data Android:name="Android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
</intent-filter>

Cependant, aucune erreur n'est signalée par le compliateur, mais data n'est pas correct. Je veux juste désactiver l'animation en cas de changement d'activité. Je peux utiliser plutôt getWindow().setWindowAnimations(0); dans onCreate ou onResume, mais utiliser flag est préférable, n'est-ce pas?

Je peux aussi utiliser dans le code:

Intent intent = new Intent(v.getContext(), newactivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
getContext().startActivity(intent);

Mais je veux utiliser ce drapeau dans Android Manifest. Désactiver l'animation aussi dans le cas où on revient de la deuxième activité à la première.

151
woyaru

Vous pouvez créer un style,

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

et le définir comme thème pour votre activité dans le manifeste:

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

Vous pouvez également définir un style pour spécifier des animations d'entrée et de sortie personnalisées. http://developer.Android.com/reference/Android/R.attr.html#windowEnterAnimation

248
Santosh

Si votre contexte est une activité, vous pouvez appeler overridePendingTransition:

Appelez immédiatement après l’une des variantes de startActivity (Intent) ou finissez de spécifier une animation de transition explicite à exécuter ensuite.

Donc, par programme:

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

Essayez ce code,

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
34

Vous pouvez également le faire dans toutes les activités dont vous ne voulez pas faire la transition:

@Override
public void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

J'aime cette approche car vous ne devez pas vous mêler du style de votre activité.

23
TastyLemons

Ce n'est pas un exemple d'utilisation ni une explication de la façon d'utiliser FLAG_ACTIVITY_NO_ANIMATION, mais il explique comment désactiver l'animation Activity, comme indiqué dans le titre de la question:

Android, comment désactiver l’effet "Effacement" lors du démarrage d’une nouvelle activité?

5
Phil

Voici une solution one-line qui fonctionne pour aussi peu que minSdkVersion 14 que vous devriez insérer en vous res/styles.xml:

<item name="Android:windowAnimationStyle">@null</item>

ainsi:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="Android:windowAnimationStyle">@null</item>
    </style>
    ...
</resources>

À votre santé!

2
user1506104

créez votre propre style en remplaçant Android: Theme

<style name="noAnimationStyle" parent="Android:Theme">
    <item name="Android:windowAnimationStyle">@null</item>
</style>

Puis utilisez-le dans manifest comme ceci:

<activity Android:name=".MainActivity"
    Android:theme="@style/noAnimationStyle">
</activity>
1
goyo

La ligne dans le style de thème fonctionne bien, mais cela remplace l'animation par un écran blanc. Surtout sur un téléphone plus lent - c'est vraiment énervant. Donc, si vous voulez une transition instantanée, vous pouvez l’utiliser dans le style du thème:

<item name="Android:windowAnimationStyle">@null</item>
<item name="Android:windowDisablePreview">true</item>
0
Vladimir Demirev