三个或更多活动之间的共享元素转换中断

xia*_*oyu 5 android android-transitions shared-element-transition

问题

我想实现 Activity A 和 B 之间以及 Activity B 和 C 之间的共享元素转换。

我根据android 转换文档做了所有事情。

之间没有问题:

  • A => B => 回到 A

  • A => B 和 B => C => 回到 B

但如果我这样做:

  • A => B 和 B => C => 回到 B => 回到 A

最后一步不会有任何共享元素过渡(实际上不仅是共享元素过渡,即使只有淡入淡出也可能会丢失)。

我一直在到处寻找解决方案,但似乎每个人都只需要 A => B(和 B => A)共享元素转换,而不再关心从 B => C 返回到 A 的任何转换。

例子

看一个我基于android的动画示例创建的例子,其中Activity A = MainActivity,B = DetailActivity,C = DetailDetailActivity。单击活动 B 上的按钮将导航到活动 C。

在此处输入图片说明

小智 1

因为在执行 C => B 时,它将为 B 重新构造一个新的 EnterTransitionCoordinator,替换旧的 EnterTransitionCoordinator ,其中包含正确的内容,mPendingExitNames这对于指示视图需要在 A 和 B 之间转换非常重要。

public boolean startExitBackTransition(final Activity activity) {
    ArrayList<String> pendingExitNames = getPendingExitNames(); // here
    if (pendingExitNames == null || mCalledExitCoordinator != null) {
        return false;
    } else {
          // ...
     }
}
Run Code Online (Sandbox Code Playgroud)

解决方案似乎有点棘手。您可以参考ThreeActivityTransitionDemo并关注SharedElementUtils.