按照 Alex Lockwood 很棒的博客文章中的步骤,我在几天内一直在尝试实现新的 Lollipop 活动和共享元素转换。但现在我面临一个问题。
我的应用程序使用 DrawerLayout 进行导航,但我也可以在单击其他视图和按钮时启动一些活动。我已经正确设置了所有活动的所有 Enter、Reenter、Return 和 Exit 转换以及调用:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(activity, getSharedViewsPairs(activity)).toBundle());
对于这些活动之间的共享元素。
如果我是第一次启动活动,过渡效果很好。当我尝试启动/恢复之前已经调用但现在已暂停并且仍然存在于活动堆栈上的活动时,我的问题就出现了。当我尝试将此活动置于前台时,则没有过渡。
我还不得不说,我为我的所有活动设置了 Intent 标志FLAG_ACTIVITY_REORDER_TO_FRONT以便如果它们之前已经启动过,我不会再次启动它们。这和它有什么关系吗?我是否错过了一些在恢复之前通过转换启动的活动时需要调用的方法?
准备活动转换的代码:
public static void requestTransitionsAnimations(Activity activity) {
if(MaterialAnimations.isAnimationSupported()){
Transition transition = TransitionInflater.from(activity).inflateTransition(R.transition.material_transitions);
activity.getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
activity.getWindow().setAllowEnterTransitionOverlap(true);
activity.getWindow().setAllowReturnTransitionOverlap(true);
activity.getWindow().setEnterTransition(new Explode());
activity.getWindow().setReenterTransition(new Explode());
activity.getWindow().setReturnTransition(new Explode());
activity.getWindow().setExitTransition(new Explode());
activity.getWindow().setSharedElementsUseOverlay(true);
activity.getWindow().setSharedElementEnterTransition(transition);
activity.getWindow().setSharedElementReenterTransition(transition);
activity.getWindow().setSharedElementExitTransition(transition);
activity.getWindow().setSharedElementReturnTransition(transition);
}
}
作为