2012-04-20 9 views
35

Quiero el efecto de deslizamiento de izquierda a derecha cuando cambio la Actividad y para eso estoy usando el siguiente código pero no obtengo ningún resultado. por favor corrigeme. Gracias ¿Cómo aplicar la animación de diapositivas entre dos actividades en Android?

en Java, tanto de archivos

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

dos archivos en el directorio 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

Utilicé este código: 'overridePendingTransition (android.R.anim.fade_in, android.R.anim.fade_out);' Puede ver estos ejemplos en [GmailAnimation] (https://github.com/CabezasGonzalezJavier/GmailAnimation) o [LopeAnimations] (https://github.com/CabezasGonzalezJavier/LopeAnimations). También puede ver más en este [Blog] (http://thedeveloperworldisyours.com/android/gmail-overriding-pending-transition/#sthash.CEhJwJLg.dpbs). – Cabezas

Respuesta

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

Agregue este dos archivo en la carpeta 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> 

Y escribir el siguiente código en onCreate (método de la siguiente actividad) que se pasa a través de la Intención.

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

jignesh: Marque como correcto si esta respuesta lo ayuda. –

+7

Gracias - Ahora, ¿cómo debo poner la animación inversa cuando regrese a la actividad anterior presionando el botón Atrás –

+0

gracias, esto realmente funcionó –

28

Puede sobrescribir la animación de la actividad predeterminada y funciona mejor que anular la Transición rápida. Uso esta solución que funciona para todas las versiones de Android. Simplemente copie y pegue 4 archivos y agregue un estilo de 4 líneas de la siguiente manera:

Cree una "Animación de actividad personalizada" y agréguela a su tema base por "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> 

A continuación, crear una carpeta en la carpeta anim res y luego crear este cuatro archivos de animación en la carpeta 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> 

Si tienes cualquier problema, entonces se puede descargar mi sample project from github.

Gracias

+0

¡Muchas gracias! –

+2

no funciona en adnroid 6 (huawei p8) – qkx

+1

Estoy usando android 6 Huawei y su rendimiento es muy bueno. :) –

0

Usted podría utilizar overridePendingTransition en startActivity en lugar de onCreate. Al menos, eso funciona para mí!

Vea un ejemplo completo here. ¡Está incluyendo una animación (inversa) en BackPressed, así que mientras regresas a la actividad anterior!En su ejemplo específico (fade-in y -out) que podría ser innecesario sin embargo.

Cuestiones relacionadas