Arouter转场动画使用和遇到的坑

846 阅读1分钟

常规使用

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()
                }
            })