218 votes

Android de gauche à droite lame animation

J'ai trois activités dont le lancement modes sont en instance unique.
À l'aide de onfling(), j'ai balancer vers la gauche et la droite.

Le problème est quand je balayez vers la droite à la gauche de la diapositive de transition est ok, mais quand je balayez de gauche à droite, j'obtiens la transition de glisser de la droite vers la gauche.

Je sais pourquoi ce qui se passe c'est parce que je suis toujours à l'envoi de nouvelles intentions. Mais, maintenant, j'ai besoin de changer l'animation de glissement de gauche à droite.

Je sais qu'il existe une méthode nommée overridingTransitionPending(), mais je ne sais pas comment définir mon animation en XML.

438voto

fargath Points 2958

Utilisez ce code xml dans``

Il s’agit de gauche à droite animation :

Il s’agit de droit à gauche animation :

Dans vos codes utiliser intention comme de gauche à droite :

Dans vos codes utiliser intention comme de droite à gauche

175voto

Si vous voulez la transition de travail pour l'ensemble de l'application, vous pouvez créer un rootacivity et hériter de l'activité dont vous avez besoin. Dans la Racine de l'Activité onCreate appel overridePendingTransition avec la direction souhaitée. Et onStart appel overridePendingTransition avec d'autres sens si l'activité est reprise. Je suis là en donnant la pleine exécution de code ci-dessous.Corrigez-moi si je me trompe.

créer ce fichier xml sur votre anim dossier

anim_slide_in_left.xml

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

anim_slide_in_right.xml

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

anim_slide_out_left.xml

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

anim_slide_out_right.xml

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

RootActivity

import android.app.Activity;
import android.os.Bundle;

public class RootActivity extends Activity {
    int onStartCount = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        onStartCount = 1;
        if (savedInstanceState == null) // 1st time
        {
            this.overridePendingTransition(R.anim.anim_slide_in_left,
                    R.anim.anim_slide_out_left);
        } else // already created so reverse animation
        { 
            onStartCount = 2;
        }
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        if (onStartCount > 1) {
            this.overridePendingTransition(R.anim.anim_slide_in_right,
                    R.anim.anim_slide_out_right);

        } else if (onStartCount == 1) {
            onStartCount++;
        }

    }

}

FirstActivity

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class FirstActivity extends RootActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tvTitle);
        tv.setText("First Activity");
        Button bt = (Button) findViewById(R.id.buttonNext);
        bt.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(i);

            }
        });
    }

}

SecondActivity

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class SecondActivity extends RootActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tvTitle);
        tv.setText("Second Activity");
        Button bt = (Button) findViewById(R.id.buttonNext);
        bt.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(SecondActivity.this, ThirdActivity.class);
                startActivity(i);

            }
        });

    }

}

ThirdActivity

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class ThirdActivity extends RootActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tvTitle);
        tv.setText("Third Activity");
        Button bt = (Button) findViewById(R.id.buttonNext);
        bt.setText("previous");
        bt.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();

            }
        });
    }

}

et enfin Manifeste

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.transitiontest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.transitiontest.FirstActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.transitiontest.SecondActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.example.transitiontest.ThirdActivity"
            android:label="@string/app_name" >
        </activity>
    </application>

</manifest>

71voto

habib Points 581

Fait un exemple de code d’application de la même chose avec les effets de la diapositive de gauche, droite, haut et bas. (Pour ceux qui ne veulent pas faire tous ces fichiers xml d’anim  :))

Commander le code sur github

16voto

sany Points 1454

En outre, vous pouvez faire ceci :

FirstClass.this.overridePendingTransition (android. R.Anim.slide_in_left, android. R.Anim.slide_out_right) ;

Et il ne faut pas faire n’importe quel xml

4voto

user2446474 Points 854

Vous pouvez utiliser ViewAnimator ou ViewFlipper à cette fin. Vous devez gérer la gauche et la droite événements d'échange et de régler le naimations.

Vous pouvez tous les exemples dans le blog.

http://learnandroideasily.blogspot.in/2013/06/detect-swap-event-in-android.html

Animation Des Exemples

http://learnandroideasily.blogspot.in/2013/05/android-animation.html

http://learnandroideasily.blogspot.in/2013/06/android-viewflipper-example.html

http://learnandroideasily.blogspot.in/2013/08/android-viewanimator-example.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X