web-dev-qa-db-fra.com

Transition d'animation entre activités à l'aide de FLAG_ACTIVITY_CLEAR_TOP

Dans mon Android, je crée une méthode qui affiche toutes les activités et affiche la première activité.

J'utilise ce code:

Intent intent = new Intent(this, MMConnection.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
this.startActivity(intent);

Comme j'ai remarqué que la transition était toujours une animation de gauche à droite, quelqu'un sait-il s'il existe un moyen de changer l'animation du système lors du démarrage d'une activité?

En fait, j'aimerais idéalement avoir une transition de droite à gauche (comme lorsque vous appuyez sur le bouton de retour)

merci pour l'aide!

33
Romain Piel

CoolMcGrr a raison, vous voulez utiliser overridePendingTransition(int enterAnim, int exitAnim) .

Pour obtenir spécifiquement la transition "bouton retour" standard, je les utilise comme transitions enterAnim et exitAnim:

Push_right_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <translate Android:fromXDelta="-100%p" Android:toXDelta="0" Android:duration="@Android:integer/config_shortAnimTime"/>
    <alpha Android:fromAlpha="0.0" Android:toAlpha="1.0" Android:duration="@Android:integer/config_shortAnimTime" />
</set>

Push_right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <translate Android:fromXDelta="0" Android:toXDelta="100%p" Android:duration="@Android:integer/config_shortAnimTime"/>
    <alpha Android:fromAlpha="1.0" Android:toAlpha="0.0" Android:duration="@Android:integer/config_shortAnimTime" />
</set>
45
E-Riz

Vous devriez jeter un oeil Activity.overridePendingTransition () .

Bien sûr, cela nécessite que vous exécutiez au moins la version 2.0 du SDK.

8
CoolMcGrrr

Le problème se produit de nos jours car pre-ICS et ICS ont des transitions d'activité intégrées différentes. C'est beaucoup plus propre que de définir votre propre animation et indépendante du SDK:

Intent intent = new Intent(this, MMConnection.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NO_ANIMATION);
this.startActivity(intent);
finish();

Cela démarrera l'activité (pas encore visible) et jouera la transition "fin d'activité" vers la nouvelle activité.

6
dzeikei

J'ai utilisé ce code:

overridePendingTransition(Android.R.anim.fade_in, Android.R.anim.fade_out);

Vous pouvez voir ces exemples dans GmailAnimation ou LopeAnimations . Vous pouvez également en voir plus dans ce Blog .

6
Cabezas