web-dev-qa-db-fra.com

Nouvelle activité dans Android "entrez par le côté"

Quelle est la meilleure façon de passer à une nouvelle activité, mais de faire en sorte que celle-ci glisse vers la gauche et que la nouvelle activité passe à l'écran? J'utilise des intentions pour appeler la nouvelle activité. Est-ce la manière de le faire si je veux que l'application soit légère?

Pour expliquer un peu mieux: sur mon téléphone Android, je peux glisser la vue avec le menu d'accueil à droite, puis entrer un flux d'amis à gauche et se dérouler à l'écran. Je veux le faire dans mon application avec des boutons, c'est le "glissement" que je recherche. Merci!

37
kakka47

Dans Android OS 2.1 ou version ultérieure, je pense que vous pouvez utiliser la méthode OverridePendingTransition () pour fournir le type de transition entre les animations que vous recherchez.

Tout d’abord, définissez quelques ressources d’animation dans / res/anim/. En voici un qui s'appelle right_slide_out.xml :

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:interpolator="@Android:anim/accelerate_decelerate_interpolator">
    <translate
        Android:fromXDelta="0"
        Android:toXDelta="100%p"
        Android:duration="500"
    />
</set>

Un autre appelé right_slide_in.xml :

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:interpolator="@Android:anim/accelerate_decelerate_interpolator">
    <translate
        Android:fromXDelta="100%p"
        Android:toXDelta="0"
        Android:duration="700"
    />
</set>

Ensuite, lorsque vous démarrez la nouvelle activité, utilisez la méthode OverridePendingTransition comme suit:

startActivity(intent);
overridePendingTransition  (R.anim.right_slide_in, R.anim.right_slide_out);

Cela devrait gérer les animations de transition pour le démarrage de l'activité.

Au contraire, lorsque cette activité est terminée et que vous revenez à l’originale, elle est un peu plus brumeuse. 

Si vous avez un contrôle d'interface utilisateur qui met fin à cette activité et appelle Activity.finish (), vous pouvez simplement ajouter le overridePendingTransition () juste après.

Pour gérer le cas où l'utilisateur met fin à l'activité en appuyant sur le bouton Précédent, utilisez l'une des méthodes suivantes:

@Override
public void onBackPressed() 
{

    this.finish();
    overridePendingTransition  (R.anim.right_slide_in, R.anim.right_slide_out);
}
90
mmeyer

Vous pouvez utiliser un left_slide_out.xml (il suffit de changer le toXDelta dans right_slide_out.xml de Josh pour lire -100% p), afin de faire disparaître l'ancienne activité vers la gauche (et d'avoir la même durée sur les deux animations).

4

Jems est correct. Par défaut, vous obtiendrez une animation glissante lors du lancement d'une nouvelle intention.

Si vous recherchez une animation plus personnalisée, vous pouvez utiliser overridePendingTransition . N'oubliez pas qu'il a été ajouté à l'API niveau 5. Consultez cet exemple de démonstration API pour consulter un exemple.

3
Noel

Oui, utiliser des intentions est la méthode standard pour démarrer une autre activité, et fait généralement ce que vous mentionnez .. P. Ex. startActivity (nouvelle intention (this, myNextActivity.class)); le fera.

3
Jems

Il y a un peu de confusion quant à ce que sont les animations d'entrée et de sortie. Pour ceux qui y réfléchissent encore, voici un modèle.

overridePendingTransition(
    enterAnimationForCalledActivity, 
    exitAnimationForCallingActivity
);

Cela devrait probablement effacer un peu l'air.

1
Ram Iyer