Activity的进出场过渡动画的使用场景有两种:
- 当前
Activity调用finish()退出:
在finish()后调用overridePendingTransition
finish()
//R.anim.activity_enter是当前Activity退出后要显示的Activity的进场动画
//R.anim.activity_exit是当前Activity退出的时候使用的动画
overridePendingTransition(R.anim.activity_enter,R.anim.activity_exit)
- 跳转其他
Activity时设置过渡动画有两种情况:
- SDK Version 小于 16时,使用
startActivity后调用overridePendingTransition - SDK Version 大于等于16时,使用
startActivity(Intent intent, @Nullable Bundle options)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN){
//SDK Version 小于 16时,使用startActivity后调用overridePendingTransition,传入两个动画的Resource Id
//R.anim.activity_enter是startActivity的目标Activity的进场动画
//R.anim.activity_exit是当前Activity退出的时候使用的动画
startActivity(Intent(this,AfterActivity::class.java))
overridePendingTransition(R.anim.activity_enter,R.anim.activity_exit)
}else{
//SDK Version 大于等于16时,使用startActivity(Intent intent, @Nullable Bundle options)
//其中options通过ActivityOptionsCompat makeCustomAnimation(@NonNull Context context,int enterResId, int exitResId)得到
//R.anim.activity_enter是startActivity的目标Activity的进场动画
//R.anim.activity_exit是当前Activity退出的时候使用的动画
val optionsBundle = ActivityOptionsCompat.makeCustomAnimation(
this,
R.anim.activity_enter,
R.anim.activity_exit
).toBundle()
startActivity(Intent(this,AfterActivity::class.java),optionsBundle)
}
附:动画xml文件
<!--activity_enter.xml-->
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXDelta="1000"
android:toXDelta="0"
android:fromYDelta="1000"
android:toYDelta="0" >
</translate>
<!--activity_exit.xml-->
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXDelta="0"
android:toXDelta="1000"
android:fromYDelta="0"
android:toYDelta="1000" >
</translate>