当我从 Activity A 启动 Activity B 时,我目前正在使用自定义共享元素转换。一切正常。
我想使用另一个不涉及任何共享元素的自定义 Transition
用于从 Activity B 返回 Activity A 的返回转换。但是,我在几个部分遇到了问题:
- 如何告诉框架返回转换不涉及任何共享元素?
- 返回转换中转换的起始值和结束值是什么?对于进入转换,我主要操纵 Activity B 的 View ,因为它们绘制在 Activity A 的顶部。返回过渡会发生什么?
感谢我能得到的任何帮助!
编辑:
进一步调查显示,即使我正在调用 setSharedElementReturnTransition
,我的返回转换的 createAnimator
甚至都没有被调用。但我知道 set 调用正在做一些事情,因为它现在不会尝试反转原始输入动画(默认行为),而不仅仅是重叠两个 View 。
编辑#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);
}
这现在导致我的返回转换的 createAnimator
至少运行,尽管动画仍然很奇怪。为什么可见性很重要?
最佳答案
- 您必须设置 SharedElementCallback 并在 onMapSharedElements 中清除共享元素映射。这将从您的过渡中消除共享元素。
- 这取决于您所谈论的过渡。具体来说,返回转换的起始结束值是 View.VISIBLE 和 View.INVISIBLE。但是返回时会发生几个转换:
返回转换:非共享元素通过更改其可见性从 Activity B 的场景中移除。
Shared Element Return Transition:Activity B 中的共享元素从调用 finishAfterTransition
时的位置开始,到 Activity A 表示共享元素所在的位置结束。这可以通过 SharedElementCallback
的 onSharedElementStart
和 onSharedElementEnd
进行调整,它们在返回期间被反向调用。
重新进入转换: Activity A 中的非共享元素 View 改变了它们的可见性。
Shared Element Reenter Transition:通常什么都不做,但是shared元素在进入Activity A之后可以做一些特别的事情。
关于android - 了解 Activity 返回转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32916837/