¿Puedo cambiar la animación de transición de Android startActivity ()?


Respuestas:


33

En la misma instrucción en la que ejecuta finish (), ejecute su animación allí también. Luego, en la nueva actividad, ejecute otra animación. Ver este código:

fadein.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fillAfter="true">
     <alpha android:fromAlpha="1.0" 
            android:toAlpha="0.0"
            android:duration="500"/> //Time in milliseconds
</set>

En tu clase final

private void finishTask() {
    if("blabbla".equals("blablabla"){
        finish();
        runFadeInAnimation();
    }
}

private void runFadeInAnimation() {
    Animation a = AnimationUtils.loadAnimation(this, R.anim.fadein);
    a.reset();
    LinearLayout ll = (LinearLayout) findViewById(R.id.yourviewhere);
    ll.clearAnimation();
    ll.startAnimation(a);   
}

fadeout.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
           android:fillAfter="true">
  <alpha android:fromAlpha="0.0"
         android:toAlpha="1.0"
         android:duration="500"/>
</set>

En su nueva clase de actividad, crea un método similar como el runFadeAnimation que escribí y luego lo ejecuta en onCreate y no se olvide de cambiar la identificación de los recursos a fadeout.


1
Además, puede ser mejor usar el tiempo de animación corto predeterminado:android:duration="@android:integer/config_shortAnimTime"
elimirks

dónde estárunFadeAnimation()
Choletski

2
Chicos, asegúrese de ver la respuesta real debajo de esta publicación.
Desarrollador de Android

que es blabbla ?? !!
Ali Khaki

288

A partir del nivel de API 5, puede llamar a overridePendingTransition inmediatamente para especificar una animación de transición explícita:

startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);

o

finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);

17
Agregue algo como: @Override public void onBackPressed () {super.onBackPressed (); overridePendingTransition (R.anim.hold, R.anim.fade_out); } para volver a agregar animaciones.
RightHandedMonkey

1
Esta debería ser la mejor respuesta limpia.
cy198706

1
@RightHandedMonkey Para volver a agregar animaciones, es mejor anular el finish (); método de la actividad para el caso en el que la actividad finalice con algo más que el botón Atrás (por ejemplo, un botón de salida personalizado ...).
Itiel Maimon

43

Ver temas en Android: http://developer.android.com/guide/topics/ui/themes.html .

En themes.xml debería haber un lugar android:windowAnimationStyledonde pueda ver la declaración del estilo en styles.xml .

Implementación de ejemplo:

<style name="AppTheme" parent="...">

    ...

    <item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>

</style>

<style name="WindowAnimationStyle">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>



3
Mejor solución .
Abhishek kumar

¿Cómo accederías @android:anim/fade_indesde el código java?
Tamoxin

17

Utilizar overridePendingTransition

startActivity();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);

fadein.xml

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

fadeout.xml

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

9

Para fadeIn y fadeOut , solo agregue esto después de super.onCreate (SavedInstanceState) en su nueva clase de actividad. No necesita crear nada más (sin XML, sin carpeta de animación, sin función adicional).

overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);

1
overridePendingTransition (android.R.anim.fade_in, android.R.anim.fade_out);
Farid Z

9

Si siempre desea la misma animación de transición para la actividad

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()) {
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }
}

4

Simplemente puede crear un contexto y hacer algo como a continuación: -

private Context context = this;

Y tu animación: -

((Activity) context).overridePendingTransition(R.anim.abc_slide_in_bottom,R.anim.abc_slide_out_bottom);

Puede utilizar cualquier animación que desee.


1

Quería usar la solución styles.xml, pero no me funcionó con las actividades. Resulta que en lugar de usar android:windowEnterAnimationy android:windowExitAnimation, necesito usar las animaciones de actividad como esta:

<style name="ActivityAnimation.Vertical" parent="">
    <item name="android:activityOpenEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityOpenExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:activityCloseEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityCloseExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:windowEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:windowExitAnimation">@anim/exit_to_bottom</item>
</style>

0
 // CREATE anim 

 // CREATE animation,animation2  xml // animation like fade out 

  Intent myIntent1 = new Intent(getApplicationContext(), Attend.class);
  Bundle bndlanimation1 =  ActivityOptions.makeCustomAnimation(getApplicationContext(), 
  R.anim.animation, R.anim.animation2).toBundle();
  tartActivity(myIntent1, bndlanimation1);

0

La mayoría de las respuestas son bastante correctas, pero algunas de ellas están en desuso, como cuando se usa R.anim.hold y algunas de ellas solo están elaborando el proceso.

Entonces, puedes usar:

startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.