¿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.