Domanda Come ottenere l'animazione da destra a sinistra per avviare l'attività


Sto lavorando su un'applicazione demo in cui voglio applicare l'animazione ogni volta che l'app avvia activity. Ho scritto sotto il codice ma questo serve per animare l'attività da sinistra a destra.

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>

Sono qui iniziando un activity come questo

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

Voglio realizzare un'animazione da destra a sinistra. Come questo può essere fatto.

Grazie in anticipo.


44
2017-10-17 18:13


origine


risposte:


Apporta queste modifiche ai tuoi file di animazione:

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>

Avrai la tua seconda attività scorrere da destra a sinistra.

Per una migliore comprensione su come giocare con i valori fromXDelta e toXDelta per le animazioni, ecco un'illustrazione molto semplice sui valori: Activity transition values on X axis

In questo modo puoi facilmente capire perché aggiungi Android: fromXDelta = "0%" e android: toXDelta = "- 100%" per la tua attività corrente. E questo perché vuoi che vada dallo 0% alla posizione -100%.

[MODIFICARE]

Quindi se vuoi aprire ActivityB da ActivityA fai quanto segue (diciamo che hai un pulsante):

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

Ora, se vuoi avere l'animazione "all'indietro" del primo, quando lasci l'Attività B, avrai bisogno di 2 nuovi file di animazione e del codice nel metodo onBackPressed di ActivityB, come questo:

Prima i file di animazione: 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>

E in ActivityB fai quanto segue:

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

Inoltre se hai attivato la navigazione abilitata, dovrai aggiungere l'animazione anche in questo caso:

Abilita la navigazione UP in questo modo:

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

E questo è il modo in cui gestisci l'animazione anche in questo caso:

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

Inoltre, tieni presente che anche se il tuo codice è corretto, il tuo telefono potrebbe avere l'animazione disattivata. Per attivare poi su fare quanto segue:

  1. Apri Impostazioni e vai a Opzioni sviluppatore
  2. Assicurati che sia abilitato (facendo scorrere il pulsante di attivazione in alto a destra)
  3. Scorri verso il basso e in Disegno, tocca queste opzioni una alla volta: Scala animazione di Windows, Scala animazione di transizione e Scala durata animatore
  4. Seleziona "Scala animazione 1x"

questo aiuta?


96
2017-10-17 18:37



overridePendingTransition dovrebbe essere chiamato nell'attività "target". Ad esempio: passando dall'Attività A -> B, inserirai il file overridePendingTransition chiamare nel onCreate di attività B.

Tieni presente che se l'utente ha disattivato l'animazione a livello di sistema, non puoi forzare la visualizzazione delle animazioni.

MODIFICARE:

Un esempio sarebbe simile a questo:

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

5
2017-10-17 18:40



Prova questo codice, funziona per me

Per scorrere da destra a sinistra

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

Per scorrere da sinistra a destra

<?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
2017-10-17 18:27



Questo è il codice perfetto per me 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"/>

In attività

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

0
2018-05-30 14:27