SharedElementTransition和ContentTransition延迟了时间

时间:2016-05-05 21:00:33

标签: android transitions shared-element-transition

如果我有两个Activities A和B,两者都有一个共享的ImageView,我希望能够实现以下过渡:

Activity A到B时,我想开始SharedElementTransition,然后一旦完成,就开始ContentTransition的{​​{1}} B。

Activity B回到A时,我想启动Activity的{​​{1}} B,然后一旦完成,启动ContentTransition返回{ {1}} A

如何设置此Activity的延迟时间? 我猜你需要某种回调听众,但我不确定使用哪种。

2 个答案:

答案 0 :(得分:2)

根据您的需求以及在这种特殊情况下最适合您的因素,您可以利用几个不同的组件。

首先,您需要利用SharedElementCallback

使用共享元素回调,您将能够确定共享元素转换何时完成(以及其他内容)。这将是进行另一次转换的理想场所,正如您所称的“内容转换”。因此,在活动B的共享元素转换被检测为已完成后,运行内容转换。

相反,在开始共享元素转换之前运行转换将会有点棘手。为此,您必须为共享元素转换添加启动延迟。实现这一目标的一种方法是:

getWindow().getSharedElementReenterTransition().setDuration(500);

转换也可以用XML定义。

其次,你应该阅读

onEnterAnimationComplete()

是AppCompatActivity的一部分。您可以在活动A中覆盖此功能。当活动的输入转换完成时,将调用此回调。这与共享元素转换不同。默认情况下,这是活动发生的淡出/淡出,不包括共享元素转换中涉及的视图。

所以,从理论上讲,你可以:

  1. 将启动延迟设置为重新输入共享元素转换
  2. 检测活动A的Enter转换何时完成并运行自定义'内容转换'
  3. 如果你的时间(开始延迟和动画持续时间)是正确的,这将有效。

    共享元素转换首先伴随着非常陡峭的学习曲线,因为有许多移动部分,没有双关语意图。我建议this read作为起点。

    您还应该阅读内置的活动转换,例如Explode()Slide()Fade()

    它们可以作为“内容转换”与您的共享元素转换一起使用,以创建一些非常漂亮的东西。

答案 1 :(得分:0)

这没有回调。而且没有直接的方法来做到这一点。 抱歉。