Android:如果其中一个共享元素在片段中,是否有办法进行 Activity 转换? Activity A 到 Activity B 的片段

Android: Is there a way to do Activity Transitions if one of the shared elements is in a Fragment? Activity A Fragment to Activity B

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

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

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

我的 Activity A 有一个带有片段的 ViewPager,我想将其视图转换为 Activity B 的视图。所以我要过渡到Activity B的View实际上是在Activity A的Fragment布局中,而不是直接在Activity A的布局中。

有什么方法可以实现吗?

我不知道这是否对你有帮助,但我做了类似的事情。

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

希望对你有所帮助。

是的,片段本身不会导致 Activity 转换出现问题。主要问题是片段往往会在稍后加载它们的内容,并且过渡系统会对可用的内容感到困惑。

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

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

反过来也是如此,当Activity B 在一个片段中有一个共享元素。您必须将 onCreate 中的输入转换推迟到 Activity B.

中加载片段并完成布局之后