Comment fournir une animation lors de l'appel d'une autre activité sous Android?


115

J'ai deux activités A et B. Je veux avoir l'animation réduite lorsque l'activité A appelle B et maximiser l'animation lorsque l'activité B appelle A. Je n'ai pas besoin des fichiers xml d'animation pour cela.

Lorsque nous appelons une autre activité dans Android, elle donne son animation par défaut, puis elle appelle une animation de réduction.

Ce que je veux, c'est que l'animation par défaut ne se produise pas et que l'animation que je souhaite se produise.

Pouvons-nous réellement donner l'animation lors de l'appel d'une autre activité?

Réponses:


144

Depuis l'API 16, vous pouvez fournir un ensemble d'options d'activité lors de l'appel de Context.startActivity (Intent, Bundle) ou des méthodes associées. Il est créé via le générateur ActivityOptions :

Intent myIntent = new Intent(context, MyActivity.class);
ActivityOptions options = 
   ActivityOptions.makeCustomAnimation(context, R.anim.fade_in, R.anim.fade_out);
context.startActivity(myIntent, options.toBundle());

N'oubliez pas de consulter les autres méthodes du générateur ActivityOptions et ActivityOptionsCompat si vous utilisez la bibliothèque de support.



API 5+:

Pour les applications ciblant le niveau d'API 5+, il existe la overridePendingTransitionméthode Activités . Il faut deux ID de ressource pour les animations entrantes et sortantes. Un identifiant de 0désactivera les animations. Appelez-le immédiatement après l' startActivityappel.

c'est à dire:

startActivity(new Intent(this, MyActivity.class));
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

API 3+:

Vous pouvez empêcher l'animation par défaut (glisser depuis la droite) avec l' Intent.FLAG_ACTIVITY_NO_ANIMATIONindicateur dans votre intention.

c'est à dire:

Intent myIntent = new Intent(context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(myIntent);

puis dans votre activité vous devez simplement spécifier votre propre animation.

Cela fonctionne également pour l'API 1.5 (niveau 3).


4
Que voulez-vous dire quand vous dites "spécifiez votre propre animation"? Comment est-ce que tu fais ça? Merci!
pqn

J'ai la même question. Probablement dans l'animation de démarrage dans onResume et onPause.
Tima

existe-t-il un moyen d'utiliser Animator à la place?
développeur android

Vous pouvez également utiliser la même chose après avoir appelé finish ()!
thiagolr

N'est-ce pas R.anim.fade_intoujours une animation de fichier xml que nous supposons avoir res\anim ?
Alex Jolig

78

Vous devez utiliser la méthode OverridePendingTransition pour y parvenir, qui se trouve dans la classe Activity . Exemples d'animations dans le dossier res / anim de l'exemple apidemos. Vérifie ça. Plus que de vérifier la démo dans ApiDemos / App / Activity / animation .

Exemple:

@Override
public void onResume(){
    // TODO LC: preliminary support for views transitions
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}

1
Merci pour la réponse. La méthode overridePendingTransition est prise en charge à partir du niveau d'API 5 et je souhaite que l'application soit prise en charge à partir d'Android 1.5. Existe-t-il un autre moyen de fournir une animation d'une activité à une autre?
dim

5
impressionnant! c'est très amusant de jouer avec
Someone Somewhere

@sunil j'ai la même question que la vôtre.Pouvez-vous résoudre le problème? animation avec api niveau 3 ou 4 (pas 5)
Dr.jacky

conserver le code d'animation dans onResume () entraînera la lecture de l'animation lorsque l'utilisateur sortira de l'application et reviendra. Pas idéal dans de nombreuses applications.
Vihaan Verma

J'avais besoin d'ajouter super.onResume();, obtenais
Gene Bo


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.