web-dev-qa-db-fra.com

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

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 une animation rétractable.

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

Pouvons-nous réellement donner l'animation lorsque nous appelons une autre activité?

112
sunil

Depuis l'API 16, vous pouvez fournir un ensemble d'options d'activité lorsque vous appelez Context.startActivity (Intent, Bundle) ou des méthodes connexes. 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 du ActivityOptionsCompat si vous utilisez la bibliothèque de support.



API 5 +:

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

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 de la droite) avec le Intent.FLAG_ACTIVITY_NO_ANIMATION drapeau dans votre intention.

c'est à dire.:

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

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

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

138
whlk

Vous devez utiliser la méthode OverridePendingTransition pour y parvenir, qui se trouve dans le classe d'activité . Exemples d'animations dans le dossier res/anim de l'exemple apidemos. Vérifie ça. Plus que vérifier la démo dans ApiDemos/App/Activité/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);
}
78
Praveen

A écrit un tutoriel pour que vous puissiez animer votre activité,

Prendre plaisir:

http://blog.blundellapps.com/animate-an-activity/

29
Blundell

Jelly Bean ajoute un support pour cela avec la méthode ActivityOptions.makeCustomAnimation () . Bien sûr, puisque ce n’est que sur le haricot Jelly, c’est quasiment sans valeur pour des raisons pratiques.

3
phreakhead