常规使用
base_activity_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500">
<alpha
android:fromAlpha="0.5"
android:toAlpha="1"/>
</set>
base_activity_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500">
<alpha
android:fromAlpha="1"
android:toAlpha="0"/>
</set>
转场动画添加
ARouter.getInstance().build("/user/login")
.withTransition(R.anim.base_activity_in, R.anim.base_activity_out)
.navigation(this)
坑1 没有传当前activity导致动画无效
平时写习惯了直接用navigation() 做的跳转,但是根据查看源码,才发现 必须用 navigation(context) 且context 必须是activity
/**
* Start activity
*
* @see ActivityCompat
*/
private void startActivity(int requestCode, Context currentContext, Intent intent, Postcard postcard, NavigationCallback callback) {
....
//
if ((-1 != postcard.getEnterAnim() && -1 != postcard.getExitAnim()) && currentContext instanceof Activity) { // Old version.
((Activity) currentContext).overridePendingTransition(postcard.getEnterAnim(), postcard.getExitAnim());
}
//
....
}
坑2 关闭当前页面导致动画无效
有次采用同样的写法,但是动画没有生效,debug才发现,原来是我的activity因为被我主动关闭了,导致context为空,跳转的时候使用了application的context
错误写法如下
ARouter.getInstance().build("/user/login")
.withTransition(R.anim.base_activity_in, R.anim.base_activity_out)
.navigation(this)
this.finish()
正确写法
ARouter.getInstance().build("/user/login")
.withTransition(R.anim.base_activity_in, R.anim.base_activity_out)
.navigation(this, object :
NavCallback() {
override fun onArrival(postcard: Postcard?) {
finish()
}
})