3

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

这是我在调用活动 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);

这是我在被调用活动 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);

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

为什么会这样?什么时候执行另一个转换?

4

1 回答 1

4

当活动A开始活动B时,会发生以下事件:

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

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

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

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

于 2015-01-14T23:29:20.813 回答