web-dev-qa-db-de.com

So erreichen Sie eine Animation von rechts nach links, um die Aktivität zu starten

Ich arbeite an einer Demoanwendung, bei der ich eine Animation anwenden möchte, wenn die App eine activity startet. Ich habe den folgenden Code geschrieben, aber dies dient dazu, die Aktivität von links nach rechts zu animieren.

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>

Ich starte hier eine activity so

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

Ich möchte eine Animation von rechts nach links erzielen. Wie kann das gemacht werden?.

Danke im Voraus.

47
N Sharma

Nehmen Sie diese Änderungen an Ihren Animationsdateien vor:

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>

Sie werden Ihre zweite Aktivität von rechts nach links verschieben.

Zum besseren Verständnis, wie man mit den Werten fromXDelta und toXDelta für die Animationen herumspielt, werden die Werte hier sehr einfach dargestellt: Activity transition values on X axis

Auf diese Weise können Sie leicht verstehen, warum Sie Android: fromXDelta = "0%" und Android: toXDelta = "- 100%" für Ihre aktuelle Aktivität hinzufügen. Und das ist so, weil Sie möchten, dass es von 0% in die -100% Position geht.

[BEARBEITEN]

Wenn Sie ActivityB über ActivityA öffnen möchten, führen Sie folgende Schritte aus (nehmen Sie an, Sie haben eine Schaltfläche):

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);
        }
    });

Wenn Sie nun die Animation "Rückwärts" der ersten Animation haben möchten, benötigen Sie beim Verlassen von Activity B zwei neue Animationsdateien und etwas Code in der onBackPressed-Methode von ActivityB.

Zuerst die Animationsdateien: 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>

Und in ActivityB mache folgendes:

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

Wenn Sie die Up-Navigation aktiviert haben, müssen Sie auch in diesem Fall die Animation hinzufügen:

Sie aktivieren die UP-Navigation folgendermaßen:

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

Und so gehen Sie auch in diesem Fall mit der Animation um:

@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);
}

Beachten Sie auch, dass die Animation für Ihr Telefon möglicherweise deaktiviert ist, auch wenn Ihr Code in Ordnung ist. Um dann einzuschalten, gehen Sie folgendermaßen vor:

  1. Öffnen Sie die Einstellungen und gehen Sie zu den Entwickleroptionen
  2. Vergewissern Sie sich, dass die Option aktiviert ist (Schieben Sie den Umschaltknopf oben rechts).
  3. Blättern Sie nach unten und unter Zeichnen Sie nacheinander auf diese Optionen: Windows-Animationsskala, Übergangs-Animationsskala und Animator-Dauer
  4. Wählen Sie "Animationsskala 1x"

Hilft das?

108
Mike

overridePendingTransition sollte in der Aktivität "Ziel" aufgerufen werden. Beispiel: Ausgehend von Aktivität A -> B würden Sie den Aufruf overridePendingTransition in onCreate von Aktivität B eingeben. 

Denken Sie daran, wenn der Benutzer die Animation auf Systemebene deaktiviert hat, können Sie die Anzeige von Animationen nicht erzwingen. 

BEARBEITEN:

Ein Beispiel würde so aussehen:

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

Versuchen Sie diesen Code, es funktioniert für mich

von rechts nach links schieben

<?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>

von links nach rechts schieben

<?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

Dies ist der perfekte Code für mich .__

<?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"/>

Rechts gerichtet

<?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"/>

In Aktivität 

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