android 属性动画失效,日常爬坑-Android Transitions动画失效

最近在我的应用KeepassA中碰到了一个诡异的过渡动画问题

API版本:29

正常状态应该如下:

c479220572b36a18539b63b57f4c2408.gif

当我从一级设置界面,进入二级设置界面后,并从二级设置界面返回时,一级界面当回主页的过渡动画消失了!!

31f680d47c18a4ad4fe6200929c118db.gif

原因分析

阅读源码发现,返回时调用的finishAfterTransition()最终会调用ActivityTransitionState的startExitBackTransition方法,但是当我从二级界面返回到一级界面,并从一级界面返回主页时,pendingExitNames变为了空,导致直接走了finish,而没有走过渡动画的逻辑。

public void finishAfterTransition(){

if (!mActivityTransitionState.startExitBackTransition(this)) {

finish();

}

}

public boolean startExitBackTransition(final Activity activity){

ArrayList pendingExitNames = getPendingExitNames();

if (pendingExitNames == null || mCalledExitCoordinator != null) {

return false;

} else {

...

}

....

}

为什么会出现pendingExitNames为空的情况呢,继续阅读源代码,通过Activity的生命周期可以知道,每当activity开始活动时(从二级界面返回一级界面会回调onStart),导致重新调用了onNewActivityOptions方法。

/** @hide */

public void onNewActivityOptions(ActivityOptions options){

mActivityTransitionState.setEnterActivityOptions(this, options); // 重新设置了option

if (!mStopped) {

mActivityTransitionState.enterReady(this);

}

}

在mActivityTransitionState.setEnterActivityOptions(this, options);中会重新设置共享元素,

如果当前activity已经停止(启动了二级页面,并从二级界面返回)则会调用mActivityTransitionState.enterReady重新构建过渡动画。

public void enterReady(Activity activity){

...

// 重新创建过渡场景,但是该场景的共享元素列表 sharedElementNames 没有数据

mEnterTransitionCoordinator = new EnterTransitionCoordinator(activity,

resu

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值