0

我知道有 Activity Transitions 可以为 Activity A 和 Activity B 之间的共享元素进行转换,如下所示:

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
    Pair.create(view1, "agreedName1"),
    Pair.create(view2, "agreedName2"));

同一个 Activity 中的 Fragment 也有 Fragment Transitions。但是有没有办法在 Activity A 的 Fragment 视图和 Activity B 之间转换共享元素?

我的活动 A 有一个带有片段的 ViewPager,这些片段具有我想转换为活动 B 的视图的视图。所以我要过渡到Activity B的Views其实是在Activity A的Fragment布局中,而不是直接在Activity A的布局中。

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

4

2 回答 2

5

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

当发生转换时,视图实际上不会从一个活动移动到另一个活动。对位置和大小(和位图)进行快照,并将该信息传输到活动 B。然后,活动 B 中的相应视图从该位置和大小转换到最终位置和大小。位图通常不使用,但如果您需要它来进行交叉淡入淡出或类似操作,则可以使用它。

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

反过来也是如此,当活动 B 在片段中具有共享元素时。您必须将 onCreate 中的 enter 转换推迟到片段加载完毕并在 Activity B 中完成布局之后。

于 2016-03-15T15:04:57.510 回答
0

我不知道这是否会帮助你,但我做了这样的事情。

ActivityOptionsCompat options = ActivityOptionsCompat
                        .makeSceneTransitionAnimation(getActivity(),
                                (View) viewHolder.clickme, "zoom");
                getActivity().startActivity(i, options.toBundle());
                getActivity().overridePendingTransition(R.anim.fadein,
                        R.anim.fadeout);

我希望它能以某种方式帮助你。

于 2016-03-15T05:34:22.300 回答