web-dev-qa-db-fra.com

Comment réaliser une animation de droite à gauche pour démarrer l'activité

Je travaille sur une application de démonstration où je souhaite appliquer une animation à chaque application qui commence activity. J'ai écrit ci-dessous le code mais c'est pour animer l'activité de gauche à droite.

left_to_right.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false">
    <translate Android:fromXDelta="-100%" Android:toXDelta="0%"
        Android:fromYDelta="0%" Android:toYDelta="0%"
        Android:duration="500"/>
</set>

right_to_left.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false">
    <translate
        Android:duration="500"
        Android:fromXDelta="0%"
        Android:fromYDelta="0%"
        Android:toXDelta="100%"
        Android:toYDelta="0%" />
</set>

Je commence ici une activity comme ceci

startActivity(new Intent(this, LoginActivity.class));
overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);

Je veux réaliser une animation de droite à gauche. Comment cela peut être fait.

Merci d'avance.

47
N Sharma

Faites ces modifications à vos fichiers d'animation:

enter.xml:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false">
    <translate
        Android:duration="500"
        Android:fromXDelta="100%"
        Android:fromYDelta="0%"
        Android:toXDelta="0%"
        Android:toYDelta="0%" />
</set>

exit.xml:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false">
    <translate
        Android:duration="500"
        Android:fromXDelta="0%"
        Android:fromYDelta="0%"
        Android:toXDelta="-100%"
        Android:toYDelta="0%" />
</set>

Votre deuxième activité glisse de droite à gauche.

Pour mieux comprendre comment utiliser les valeurs fromXDelta et toXDelta pour les animations, voici une illustration très basique des valeurs: Activity transition values on X axis

De cette façon, vous pouvez facilement comprendre pourquoi vous ajoutez Android: fromXDelta = "0%" et Android: toXDelta = "- 100%" pour votre activité actuelle. Et c’est parce que vous voulez qu’il passe de 0% à -100%.

[MODIFIER]

Donc, si vous voulez ouvrir ActivityB à partir de ActivityA, procédez comme suit (supposons que vous ayez un bouton):

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(ActivityA.this, ActivityB.class));
            overridePendingTransition(R.anim.enter, R.anim.exit);
        }
    });

Maintenant, si vous voulez avoir l'animation "en arrière" de la première, lorsque vous quittez l'activité B, vous aurez besoin de 2 nouveaux fichiers d'animation et du code dans la méthode onBackPressed de ActivityB, comme ceci:

D'abord les fichiers d'animation: Left_to_right.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false">
    <translate
        Android:duration="500"
        Android:fromXDelta="-100%"
        Android:fromYDelta="0%"
        Android:toXDelta="0%"
        Android:toYDelta="0%" />
</set>

right_to_left.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false">
    <translate
        Android:duration="500"
        Android:fromXDelta="0%"
        Android:fromYDelta="0%"
        Android:toXDelta="100%"
        Android:toYDelta="0%" />
</set>

Et dans ActivityB, procédez comme suit:

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
}

De plus, si vous avez activé la navigation ascendante, vous devrez également ajouter l'animation:

Vous activez la navigation UP comme ceci:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

Et voici comment vous gérez l'animation dans ce cas également:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case Android.R.id.home:
       //NavUtils.navigateUpFromSameTask(this);
       finish();
       overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left);
       return true;
    }
    return super.onOptionsItemSelected(item);
}

Sachez également que même si votre code est correct, les animations peuvent être désactivées sur votre téléphone. Pour allumer, procédez comme suit:

  1. Ouvrez les paramètres et allez dans Options du développeur
  2. Assurez-vous qu'il est activé (en faisant glisser le bouton bascule en haut à droite)
  3. Faites défiler la liste et sous Dessin, sélectionnez ces options une par une: échelle d'animation Windows, échelle d'animation Transition et échelle de durée Animator
  4. Sélectionnez "Animation scale 1x"

Est-ce que cela aide?

108
Mike

overridePendingTransition devrait être appelé dans l'activité "cible". Par exemple: à partir de l'activité A -> B, vous placeriez l'appel overridePendingTransition dans la onCreate de l'activité B. 

N'oubliez pas que si l'utilisateur a désactivé l'animation au niveau du système, vous ne pouvez pas forcer l'affichage des animations. 

MODIFIER:

Un exemple ressemblerait à ceci:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(R.anim.enter, R.anim.exit);
}
6
soundsofpolaris

Essayez ce code, ça marche pour moi

Pour glisser de droite à gauche

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:fillAfter="true" >
    <translate
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:duration="500"
        Android:fromXDelta="0%"
        Android:toXDelta="-50%" >
    </translate>
</set>

Pour glisser de gauche à droite

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="500"
    Android:fromXDelta="-50%"
    Android:toXDelta="0%" >
</translate>
1
saranya

C'est le code parfait pour moi Slideinleft

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

Slideinright

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

En activité 

Intent intent = new Intent(getApplicationContext(),termcondionactivity.class);
Bundle bndlAnimation = ActivityOptions.makeCustomAnimation(getApplicationContext(), R.anim.slideinleft, R.anim.slideinright).toBundle();

startActivity(intent, bndlAnimation);
0
Maulik Patel