2

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

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

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

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

编辑:

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

编辑#2:

看了乔治·芒特的回答后,我补充说

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

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

这现在导致我的返回过渡createAnimator至少运行,尽管动画仍然很奇怪。为什么能见度很重要?

4

2 回答 2

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

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

共享元素返回转换:活动 B 中的共享元素开始于它finishAfterTransition被调用时的位置,并结束于活动 A 所说的共享元素所在的位置。这可以通过SharedElementCallback'sonSharedElementStart和来调整onSharedElementEnd,在返回时反向调用。

重新进入转换:来自活动 A 的非共享元素视图改变了它们的可见性。

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

于 2015-10-06T14:42:02.837 回答
2

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

于 2015-10-07T18:48:58.050 回答