Activity进出场过渡动画使用

1,448 阅读1分钟

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时设置过渡动画有两种情况:
  1. SDK Version 小于 16时,使用startActivity后调用overridePendingTransition
  2. 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>