如果我有两个 Activity
A 和 B,都有一个共享的 ImageView
,我希望执行以下转换:
从 Activity
A 到 B 时,我想启动 SharedElementTransition
,然后一旦完成,启动 的
B.ContentTransition
Activity
从Activity
B返回到A时,我想启动Activity
B的ContentTransition
,然后一旦完成,启动SharedElementTransition
返回到 Activity
A
如何设置Transitions
的延迟时间?
我猜您需要某种回调监听器,但我只是不确定要使用哪些回调监听器。
最佳答案
您可以根据您的需求以及在这种特定情况下对您最有意义的方式利用几个不同的组件。
首先,您需要利用SharedElementCallback
使用共享元素回调,您将能够确定共享元素转换何时完成(除其他外)。这将是执行另一次转换的完美位置,正如您所说的“内容转换”。因此,在检测到 Activity B 的共享元素转换完成后,运行内容转换。
相反,在共享元素转换开始之前运行转换会有点棘手。为此,您必须为共享元素转换添加开始延迟。实现此目的的一种方法是:
getWindow().getSharedElementReenterTransition().setDuration(500);
转换也可以在 XML 中定义。
其次,您应该阅读
onEnterAnimationComplete()
这是 AppCompatActivity 的一部分。您可以在 Activity A 中重写此函数。当 Activity 的 Enter Transition 完成时,将调用此回调。这与共享元素转换不同。默认情况下,这是 Activity 发生的淡出/淡入,不包括共享元素转换中涉及的 View 。
因此,理论上,您可以:
- 为重新进入共享元素转换设置开始延迟
- 检测 Activity A 的 Enter 转换何时完成并运行自定义“内容转换”
如果您的计时(开始延迟和动画持续时间)正确,那么这将起作用。
共享元素转换一开始的学习曲线相当陡峭,因为有很多移动部件,这不是双关语。我推荐this read作为起点。
您还应该阅读内置的 Activity 转换,例如 Explode()
、Slide()
和 Fade()
它们可以用作“内容转换”,与您的共享元素转换一起创建一些非常漂亮的东西。
关于android - 共享元素转换和 ContentTransition 延迟计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37060182/