Estoy comenzando una actividad y prefiero tener un desvanecimiento alfa para startActivity()
y un desvanecimiento para finish()
. ¿Cómo puedo hacer esto en el SDK de Android?
fuente
Estoy comenzando una actividad y prefiero tener un desvanecimiento alfa para startActivity()
y un desvanecimiento para finish()
. ¿Cómo puedo hacer esto en el SDK de Android?
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.
android:duration="@android:integer/config_shortAnimTime"
runFadeAnimation()
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);
Ver temas en Android: http://developer.android.com/guide/topics/ui/themes.html .
En themes.xml debería haber un lugar android:windowAnimationStyle
donde 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>
@android:anim/fade_in
desde el código java?
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>
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);
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);
}
}
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.
Quería usar la solución styles.xml, pero no me funcionó con las actividades. Resulta que en lugar de usar android:windowEnterAnimation
y 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>
// 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);
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);