如果我有两个Activities
A和B,两者都有一个共享的ImageView
,我希望能够实现以下过渡:
从Activity
A到B时,我想开始SharedElementTransition
,然后一旦完成,就开始ContentTransition
的{{1}} B。
从Activity
B回到A时,我想启动Activity
的{{1}} B,然后一旦完成,启动ContentTransition
返回{ {1}} A
如何设置此Activity
的延迟时间?
我猜你需要某种回调听众,但我不确定使用哪种。
答案 0 :(得分:2)
根据您的需求以及在这种特殊情况下最适合您的因素,您可以利用几个不同的组件。
首先,您需要利用SharedElementCallback
使用共享元素回调,您将能够确定共享元素转换何时完成(以及其他内容)。这将是进行另一次转换的理想场所,正如您所称的“内容转换”。因此,在活动B的共享元素转换被检测为已完成后,运行内容转换。
相反,在开始共享元素转换之前运行转换将会有点棘手。为此,您必须为共享元素转换添加启动延迟。实现这一目标的一种方法是:
getWindow().getSharedElementReenterTransition().setDuration(500);
转换也可以用XML定义。
其次,你应该阅读
onEnterAnimationComplete()
是AppCompatActivity的一部分。您可以在活动A中覆盖此功能。当活动的输入转换完成时,将调用此回调。这与共享元素转换不同。默认情况下,这是活动发生的淡出/淡出,不包括共享元素转换中涉及的视图。
所以,从理论上讲,你可以:
如果你的时间(开始延迟和动画持续时间)是正确的,这将有效。
共享元素转换首先伴随着非常陡峭的学习曲线,因为有许多移动部分,没有双关语意图。我建议this read作为起点。
您还应该阅读内置的活动转换,例如Explode()
,Slide()
和Fade()
它们可以作为“内容转换”与您的共享元素转换一起使用,以创建一些非常漂亮的东西。
答案 1 :(得分:0)
这没有回调。而且没有直接的方法来做到这一点。 抱歉。