2012-04-20 14 views
35

Voglio l'effetto diapositiva da sinistra a destra quando cambio l'attività e per quello sto usando il seguente codice ma non ottengo alcun risultato. per favore correggimi GrazieCome applicare l'animazione di diapositiva tra due attività in Android?

in Java sia di file

super.onCreate(savedInstanceState); 
overridePendingTransition(R.anim.fadein, R.anim.fadeout); 
setContentView(R.layout.main); 

due file nella directory res/anim
fadein.xml

<?xml version="1.0" encoding="utf-8"?> 
<alpha 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:duration="5000" 
android:fromAlpha="0.0" 
android:interpolator="@android:anim/slide_out_right" 
android:toAlpha="1.0" > 
</alpha> 

fadeout.xml

<?xml version="1.0" encoding="utf-8"?> 
<alpha 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:duration="5000" 
android:fromAlpha="0.0" 
android:interpolator="@android:anim/slide_in_left" 
android:toAlpha="1.0" > 
</alpha> 
+0

Ho usato questo codice: 'overridePendingTransition (android.R.anim.fade_in, android.R.anim.fade_out);' Puoi vedere questi esempi in [GmailAnimation] (https://github.com/CabezasGonzalezJavier/GmailAnimation) o [LopeAnimations] (https://github.com/CabezasGonzalezJavier/LopeAnimations). Inoltre puoi vedere di più in questo [Blog] (http://thedeveloperworldisyours.com/android/gmail-overriding-pending-transition/#sthash.CEhJwJLg.dpbs). – Cabezas

risposta

26
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splashscreen); 

     new Handler().postDelayed(new Runnable() { 
      public void run() { 

        /* Create an intent that will start the main activity. */ 
        Intent mainIntent = new Intent(SplashScreen.this, 
          ConnectedActivity.class); 
        mainIntent.putExtra("id", "1"); 

        //SplashScreen.this.startActivity(mainIntent); 
        startActivity(mainIntent); 
        /* Finish splash activity so user cant go back to it. */ 
        SplashScreen.this.finish(); 

        /* Apply our splash exit (fade out) and main 
         entry (fade in) animation transitions. */ 
        overridePendingTransition(R.anim.mainfadein,R.anim.splashfadeout); 
      } 
    }, SPLASH_DISPLAY_TIME); 
    } 
120

Aggiungi questo file due nella cartella res/anim.

slide_in.xml

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

slide_out.xml

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

e scrivere il seguente codice nel onCreate (metodo di attività successiva) che si passa attraverso l'intento.

  overridePendingTransition(R.anim.slide_in, R.anim.slide_out); 
+0

jignesh: contrassegna come giusto se questa risposta ti aiuta. –

+7

Grazie - Ora come dovrei inserire l'animazione inversa quando torno alla vecchia attività premendo il pulsante indietro –

+0

grazie, questo ha funzionato veramente –

28

È possibile sovrascrivere l'animazione di attività predefinita ed è meglio che eseguire l'override di Transizione. Io uso questa soluzione che funziona per ogni versione di Android. Basta copiare i file 4 incollati e aggiungere uno stile di 4 linee come di seguito:

Creare un "CustomActivityAnimation" e aggiungerlo al tema di base per "windowAnimationStyle".

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorPrimary</item> 
    <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> 

</style> 

<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity"> 
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> 
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
    <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item> 
    <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> 
</style> 

quindi creare cartelle nella cartella anim res e poi creare questa quattro file di animazione in cartella anim:

slide_in_right.xml

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

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_left.xml

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

slide_in_left .xml

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

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_right.xml

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

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

Se dovete affrontare qualsiasi problema, allora si può scaricare il mio sample project from github.

Grazie

+0

Grazie mille! –

+2

non funziona su adnroid 6 (huawei p8) – qkx

+1

Sto usando Android 6 Huawei e il suo rendimento molto bene. :) –

0

Si potrebbe utilizzare overridePendingTransition in startActivity invece di onCreate. Almeno, questo funziona per me!

Vedere un esempio completo here. Sta includendo un'animazione (inversa) su BackPress, quindi tornando all'attività precedente!Nel tuo esempio specifico (fade-in e -out) che potrebbe non essere necessario.

Problemi correlati