Android:如果共享元素之一在Fragment中,是否可以进行活动转换?活动A片段到活动B

Geo*_*ang 0 android android-layout android-transitions activity-transition

我知道可以通过活动转换来在活动A和活动B之间对共享元素进行转换,如下所示:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
    Pair.create(view1, "agreedName1"),
    Pair.create(view2, "agreedName2"));
Run Code Online (Sandbox Code Playgroud)

同一活动中的片段也有片段转换。但是,是否有一种方法可以在活动A的“片段”视图和活动B之间转换共享元素?

我的活动A有一个带有片段的ViewPager,这些片段具有要转换为活动B的视图的视图。因此,我要转换为活动B的视图实际上是在活动A的“片段”布局中,而不是直接在活动A的布局中。

有什么办法可以使这项工作吗?

Geo*_*unt 5

是的,片段本身不会导致活动转换出现问题。主要问题是片段倾向于在以后加载其内容,并且过渡系统对可用内容感到困惑。

进行过渡时,视图实际上不会从一个活动转移到另一个活动。拍摄了位置和大小(以及位图)的快照,并将信息传输到活动B。然后,活动B中的相应视图从该位置和大小过渡到最终位置和大小。通常不使用位图,但在需要使用该位图进行淡入淡出或类似效果时会使用该位图。

如果共享元素在活动A的片段中,则传出过渡很好-视图存在且位置正确。唯一的潜在问题是过渡的回归。当活动B关闭时,可能需要重新启动活动A(内存压力,方向更改等)。在这种情况下,必须重新创建片段并正确放置视图。在中onActivityReenter,调用postponeEnterTransition,然后在加载片段并完成布局后,调用startPostponedEnterTransition。然后,活动B将知道共享元素的最终位置和大小,因此可以开始其动画。

相反,当活动B在片段中具有共享元素时,情况也是如此。您将不得不推迟onCreate中的enter转换,直到片段被加载并且Activity B中的布局完成为止。