I am starting an activity and would rather have a alpha fade-in for startActivity()
, and a fade-out for the finish()
. How can I go about this in the Android SDK?

- 33,113
- 21
- 131
- 183
-
1http://stackoverflow.com/questions/8319465/how-to-change-all-the-activity-transitions-at-once-in-android-application/8319701#8319701 – Gelldur Aug 04 '14 at 20:33
-
for slide transition `startActivity(intent);` `overridePendingTransition(android.R.anim.slide_out_right, android.R.anim.slide_in_left);` – beginner Jun 04 '21 at 07:45
10 Answers
Starting from API level 5 you can call overridePendingTransition immediately to specify an explicit transition animation:
startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);
or
finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);

- 4,041
- 2
- 19
- 16
-
17Add something like: @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.hold, R.anim.fade_out); } for adding back animations. – RightHandedMonkey Oct 04 '13 at 17:03
-
1@RightHandedMonkey For adding back animations better override the finish(); method of the activity for case in which the activity ends by something else than the back button (e.g. a custom exit button...). – Itiel Maimon Jan 10 '18 at 22:00
See themes on android: http://developer.android.com/guide/topics/ui/themes.html.
Under themes.xml there should be android:windowAnimationStyle
where you can see the declaration of the style in styles.xml.
Example implementation:
<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>

- 7,802
- 4
- 31
- 37

- 2,203
- 5
- 22
- 33
-
1http://www.maxters.net/2011/05/android-animation-between-activity-switching-using-theme/ – Gelldur Aug 04 '14 at 20:15
-
Update links for themes.xml and styles.xml https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml – vovahost Jan 22 '16 at 11:03
-
3
-
In the same statement in which you execute finish(), execute your animation there too. Then, in the new activity, run another animation. See this code:
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>
In your finish-class
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>
In your new Activity-class you create a similiar method like the runFadeAnimation I wrote and then you run it in onCreate and don't forget to change the resources id to fadeout.

- 18,174
- 13
- 67
- 90

- 1,972
- 3
- 30
- 51
-
1In addition, it may be better to use the default short animation time: ```android:duration="@android:integer/config_shortAnimTime"``` – elimirks Nov 28 '13 at 16:09
-
-
2Guys, please be sure to see the real answer below this post. – Android developer Feb 26 '18 at 18:21
-
1
Use 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>

- 2,841
- 1
- 30
- 39
For fadeIn and fadeOut, only add this after super.onCreate(savedInstanceState) in your new Activity class. You don't need to create something else (No XML, no anim folder, no extra function).
overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);

- 3,860
- 2
- 28
- 21
-
2overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); – Farid Z Jul 21 '18 at 17:01
If you always want to the same transition animation for the activity
@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);
}
}

- 960
- 1
- 9
- 18
You can simply create a context and do something like below:-
private Context context = this;
And your animation:-
((Activity) context).overridePendingTransition(R.anim.abc_slide_in_bottom,R.anim.abc_slide_out_bottom);
You can use any animation you want.

- 1,353
- 2
- 18
- 35
I wanted to use the styles.xml solution, but it did not work for me with activities.
Turns out that instead of using android:windowEnterAnimation
and android:windowExitAnimation
, I need to use the activity animations like this:
<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>
Which I then reference in my theme:
<style name="AppTheme">
...
<item name="android:windowAnimationStyle">@style/ActivityAnimation.Vertical</item>
...
</style>
Also, for some reason this only worked from Android 8 and above. I added the following code to my BaseActivity, to fix it for the API levels below:
override fun finish() {
super.finish()
setAnimationsFix()
}
/**
* The activityCloseExitAnimation and activityCloseEnterAnimation properties do not work correctly when applied from the theme.
* So in this fix, we retrieve them from the theme, and apply them.
* @suppress Incorrect warning: https://stackoverflow.com/a/36263900/1395437
*/
@SuppressLint("ResourceType")
private fun setAnimationsFix() {
// Retrieve the animations set in the theme applied to this activity in the manifest..
var activityStyle = theme.obtainStyledAttributes(intArrayOf(android.R.attr.windowAnimationStyle))
val windowAnimationStyleResId = activityStyle.getResourceId(0, 0)
activityStyle.recycle()
// Now retrieve the resource ids of the actual animations used in the animation style pointed to by
// the window animation resource id.
activityStyle = theme.obtainStyledAttributes(windowAnimationStyleResId, intArrayOf(android.R.attr.activityCloseEnterAnimation, android.R.attr.activityCloseExitAnimation))
val activityCloseEnterAnimation = activityStyle.getResourceId(0, 0)
val activityCloseExitAnimation = activityStyle.getResourceId(1, 0)
activityStyle.recycle()
overridePendingTransition(activityCloseEnterAnimation, activityCloseExitAnimation);
}

- 16,487
- 7
- 59
- 71
// 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();
startActivity(myIntent1, bndlanimation1);

- 441
- 5
- 12
Most of the answers are pretty correct, but some of them are deprecated such as when using R.anim.hold and some of them are just elaboratig the process.
So, you can use:
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

- 1,333
- 2
- 12
- 23