为什么只有被调用的activity的共享元素才进入transition run?

Gho*_*ing 3 android android-transitions shared-element-transition

我尝试在我的应用程序中添加自定义共享元素转换,并使其在不同活动中的某些不同模式下工作。但在我的测试中,仅执行被调用活动的进入转换。

这是我在调用活动 A 中的代码:

    TransitionSet set = new TransitionSet();
    set.setOrdering(TransitionSet.ORDERING_TOGETHER);
    set.addTransition(new ChangeBounds());
    PortalHeaderBackgroundTransition back = new PortalHeaderBackgroundTransition();
    back.setMode(0);
    set.addTransition(back);
    getWindow().setSharedElementEnterTransition(set);

    set = new TransitionSet();
    set.setOrdering(TransitionSet.ORDERING_TOGETHER);
    set.addTransition(new ChangeBounds());
    back = new PortalHeaderBackgroundTransition();
    back.setMode(1);
    set.addTransition(back);
    getWindow().setSharedElementExitTransition(set);
Run Code Online (Sandbox Code Playgroud)

这是我在被调用的活动 B 中的代码:

    TransitionSet set = new TransitionSet();
    set.setOrdering(TransitionSet.ORDERING_TOGETHER);
    set.addTransition(new ChangeBounds());
    PortalHeaderBackgroundTransition back = new PortalHeaderBackgroundTransition();
    back.setMode(2);
    set.addTransition(back);
    getWindow().setSharedElementEnterTransition(set);

    set = new TransitionSet();
    set.setOrdering(TransitionSet.ORDERING_TOGETHER);
    set.addTransition(new ChangeBounds());
    back = new PortalHeaderBackgroundTransition();
    back.setMode(3);
    set.addTransition(back);
    getWindow().setSharedElementExitTransition(set);
Run Code Online (Sandbox Code Playgroud)

我在 PortalHeaderBackgroundTransition 中添加断点,每当 A 调用 B 或 B 返回 A 时,仅执行模式 2 转换。

为什么会出现这种情况?另一个转换何时执行?

Ale*_*ood 5

当 ActivityA启动 Activity时B,会发生以下事件:

  1. A的退出共享元素转换已运行。
  2. B的进入共享元素转换已运行。

B返回到 时A,会发生以下事件:

  1. B运行 的返回共享元素转换(如果未指定返回转换,B则将使用 的输入共享元素转换)。
  2. A运行 的重新进入共享元素转换(如果未指定重新进入转换,A则将使用 的退出共享元素转换)。

因此,为了回答您的问题,A永远不会执行输入共享元素转换,因为这就是活动转换的工作方式。:)