核心问题:shareElement共享动画触发时机非常靠前,并且非常短。如果第二个activity开启比较慢(比如app比较大,或者需要异步加载什么的),这会导致动画在第二个activity还没加载好时,便已经执行。直白的说,就是动画出不来。为了保证在动画执行时,第二个activity已经加载好。通常有以下方案。
1. activity实现版
在第二个activity的oncreate()中调用PostponeEnterTransition(),暂停动画执行(在外界看业,就是界面僵死了),在确认第二个activity加载好后,调用 StartPostponedEnterTransition();来继续动画。
2.fragment实现版
同时启动fragment1和fragment2,并且把fragment1设定为show, fragment2设定为hide. 需要动画时,把fragment2设定为true,这样来保证fragment2显示够快。也就是抢时间。
参考下面这个贴子:
Getting Started with Activity & Fragment Transitions
总之,看样子,目前的安卓,如果要使用共享动画,要踩的坑很多。如果是重要项目,建议先不要上了。
碰到的其它一个问题
fragment使用CoordinatorLayout布局时,不能设置android:fitsSystemWindows="true",否则会导致顶部toolbar出现只能显示一部分的问题,甚至会遗留给上一个fragment,挤压framelayout布局