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

Cortina
fuente
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);
Allen Chan
fuente
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>
monmonja
fuente
1
maxters.net/2011/05/…
Dawid Drozd
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>
Mohsen mokhtari
fuente
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);
Cedriga
fuente
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);
    }
}
Farid Z
fuente
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.

Julfikar
fuente
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>
Daniel Zolnai
fuente
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);
Ashif
fuente
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);
RAWNAK YAZDANI
fuente