理解 activity return 转换

Understanding activity return transitions

当我从 activity A 启动 Activity B 时,我目前正在使用自定义共享元素转换。一切正常。

我想使用另一个不涉及任何共享元素的自定义 Transition 从 activity B 回到 activity A 的 return 转换。但是,我在几个部分遇到了问题:

  1. 如何告诉框架 return 转换不涉及任何共享元素?
  2. return 转换中转换的开始值和结束值是什么?对于输入转换,我主要操纵 activity B 的视图,因为它们绘制在 activity A 的顶部。 return 转换中会发生什么?

感谢我能得到的任何帮助!

编辑:

进一步调查显示我的 return 转换 createAnimator 甚至没有被调用,即使我正在调用 setSharedElementReturnTransition。但我知道 set 调用正在做一些事情,因为它现在不会尝试反转原始输入动画(默认行为),而不仅仅是重叠两个视图。

编辑#2:

看了George Mount的回答后,我加了

@Override
public void captureStartValues(TransitionValues transitionValues) {
    transitionValues.view.setVisibility(View.VISIBLE);
}

@Override
public void captureEndValues(TransitionValues transitionValues) {
    transitionValues.view.setVisibility(View.INVISIBLE);
}

现在这导致我的 return 过渡 createAnimator 至少 运行 尽管动画仍然很奇怪。为什么可见性很重要?

  1. 您必须设置 SharedElementCallback 并在 onMapSharedElements 中清除共享元素映射。这将从您的过渡中消除共享元素。
  2. 这取决于您所谈论的过渡。具体来说,return 转换的起始结束值是 View.VISIBLE 和 View.INVISIBLE。但是当 returning:
  3. 时会发生几个转换

Return Transition:非共享元素通过更改其可见性从 Activity B 中的场景中移除。

共享元素Return转换:ActivityB中的共享元素从调用finishAfterTransition时的位置开始,到Activity A 表示共享元素是。这可以通过 SharedElementCallbackonSharedElementStartonSharedElementEnd 来调整,它们在 return 期间被反向调用。

Reenter Transition:来自 Activity A 的非共享元素视图更改了它们的可见性。

Shared Element Reenter Transition:通常没什么,但是共享元素在到达Activity A后可以做一些特别的事情。

我实际上找到了导致我的 return 转换 createAnimator 不 运行 的罪魁祸首。显然,如果转换框架认为转换视图的开始和结束状态相同,它就不会创建动画器。因此,在 captureStartStatecaptureEndState 中添加一些虚拟但不同的值最终导致我的 return 正确过渡到 运行。