理解 activity return 转换
Understanding activity return transitions
当我从 activity A 启动 Activity B 时,我目前正在使用自定义共享元素转换。一切正常。
我想使用另一个不涉及任何共享元素的自定义 Transition
从 activity B 回到 activity A 的 return 转换。但是,我在几个部分遇到了问题:
- 如何告诉框架 return 转换不涉及任何共享元素?
- 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
至少 运行 尽管动画仍然很奇怪。为什么可见性很重要?
- 您必须设置 SharedElementCallback 并在 onMapSharedElements 中清除共享元素映射。这将从您的过渡中消除共享元素。
- 这取决于您所谈论的过渡。具体来说,return 转换的起始结束值是 View.VISIBLE 和 View.INVISIBLE。但是当 returning:
时会发生几个转换
Return Transition:非共享元素通过更改其可见性从 Activity B 中的场景中移除。
共享元素Return转换:ActivityB中的共享元素从调用finishAfterTransition
时的位置开始,到Activity A 表示共享元素是。这可以通过 SharedElementCallback
的 onSharedElementStart
和 onSharedElementEnd
来调整,它们在 return 期间被反向调用。
Reenter Transition:来自 Activity A 的非共享元素视图更改了它们的可见性。
Shared Element Reenter Transition:通常没什么,但是共享元素在到达Activity A后可以做一些特别的事情。
我实际上找到了导致我的 return 转换 createAnimator
不 运行 的罪魁祸首。显然,如果转换框架认为转换视图的开始和结束状态相同,它就不会创建动画器。因此,在 captureStartState
和 captureEndState
中添加一些虚拟但不同的值最终导致我的 return 正确过渡到 运行。
当我从 activity A 启动 Activity B 时,我目前正在使用自定义共享元素转换。一切正常。
我想使用另一个不涉及任何共享元素的自定义 Transition
从 activity B 回到 activity A 的 return 转换。但是,我在几个部分遇到了问题:
- 如何告诉框架 return 转换不涉及任何共享元素?
- 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
至少 运行 尽管动画仍然很奇怪。为什么可见性很重要?
- 您必须设置 SharedElementCallback 并在 onMapSharedElements 中清除共享元素映射。这将从您的过渡中消除共享元素。
- 这取决于您所谈论的过渡。具体来说,return 转换的起始结束值是 View.VISIBLE 和 View.INVISIBLE。但是当 returning: 时会发生几个转换
Return Transition:非共享元素通过更改其可见性从 Activity B 中的场景中移除。
共享元素Return转换:ActivityB中的共享元素从调用finishAfterTransition
时的位置开始,到Activity A 表示共享元素是。这可以通过 SharedElementCallback
的 onSharedElementStart
和 onSharedElementEnd
来调整,它们在 return 期间被反向调用。
Reenter Transition:来自 Activity A 的非共享元素视图更改了它们的可见性。
Shared Element Reenter Transition:通常没什么,但是共享元素在到达Activity A后可以做一些特别的事情。
我实际上找到了导致我的 return 转换 createAnimator
不 运行 的罪魁祸首。显然,如果转换框架认为转换视图的开始和结束状态相同,它就不会创建动画器。因此,在 captureStartState
和 captureEndState
中添加一些虚拟但不同的值最终导致我的 return 正确过渡到 运行。