如何共享元素从片段过渡到 activity

how to Shared element transition from a fragment to an activity

我在 activity 的 ViewPager 中有三个片段,我想实现从一个片段到另一个 activity 的共享元素转换。过渡来自回收站视图,该视图位于片段内,而片段位于 Activity 内的 viewpager 内 Activity->ViewPager->Fragment->Recyclerview

我在互联网上的每个地方都进行了搜索,但只有关于从一个片段到另一个片段以及一个 activity 到另一个片段的共享元素转换的信息。 没有关于fragment到activity

过渡的内容
holder.poster.setTransitionName("posterX");
            ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) con,holder.poster,holder.poster.getTransitionName());
            Log.e("Animation", "Success");
            //startActivity((Activity) con,intent,options.toBundle());
            c.startActivity(intent,options.toBundle());

在使用上面的代码时,第二个 activity 已启动,但没有任何内容可见,例如,第二个 activity 包含一个 FAB,当点击 youtube 时它会启动。 我知道 FAB 在哪里,所以当我盲目点击时,youtube 正确启动但第二秒什么都看不到 activity

D/ViewRootImpl: changeCanvasOpacity: opaque=true

它是 logcats 之一。 我想这一定是问题所在!!

我遇到了同样的问题,抱歉,我找不到任何有用的东西,但也许你应该重新考虑为什么你需要片段到 Activity 的关系,而你可以使用片段到片段或 Activity 到 Activity 关系。

我已经通过将我的代码更改为片段到片段关系的方式解决了我的问题,并且有大量关于此的文档和示例Shared Element Transitions

片段到 Activity 与 Activity 到 Activity 相同,因为你的片段在 Activity.

终于找到答案了,startActivity的调用方式不一样。 你必须打电话给

startActivityFromFragment(fragment, intent, req_code, options.toBundle());

来自 AppCompactActivity

我认为使用 Pairs 如下:

 Pair[] pairs = new Pair[1];
            pairs[0] = new Pair<View, String>(tvArtifacts, "itemTrans");
            ActivityOptions options = null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                options = ActivityOptions.makeSceneTransitionAnimation(getActivity(), pairs);
            }

            Intent i = new Intent(getActivity(), ItemDetailActivity.class);
            i.putExtra("item_name", "item 2");
            if (options != null) {
                startActivity(i, options.toBundle());
            } else {
                startActivity(i);
            }

这对我有用! 谢谢..