如何共享元素从片段到活动的转换

时间:2016-07-26 15:02:41

标签: android android-activity fragment transition shared

我在一个活动中的ViewPager中有三个片段,我想实现从一个片段到另一个片段的共享元素转换。转换来自回收器视图,该视图位于活动内部的viewpager内部的片段内 活动 - > ViewPager->片段 - > Recyclerview

我搜索了每个地方的互联网,但是只有关于从一个片段到另一个片段的共享元素转换以及一个活动到另一个片段的信息。 没有关于从片段到活动的转换的内容

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());

在使用上面的代码时,第二个活动已启动,但没有任何内容可见,例如,第二个活动包含一个FAB,当点击youtube时会启动它。 当我盲目点击时,我知道FAB在哪里,youtube正确启动但在第二个活动中没有任何内容

D/ViewRootImpl: changeCanvasOpacity: opaque=true

它的一个logcats。 我认为这一定是问题!!

4 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我找不到任何有用的信息,但是当你可以使用Fragment to Fragment或Activity to Activity关系时,你可能会重新考虑为什么需要Fragment to Activity关系。

我已经解决了我的问题,即将我的代码更改为Fragment to Fragment关系,并且有大量关于Shared Element Transitions的文档和示例

答案 1 :(得分:1)

片段到活动与活动相同,因为您的片段在活动中。

答案 2 :(得分:1)

我终于找到了答案,startActivity调用方法是不同的。 你必须致电

startActivityFromFragment(fragment, intent, req_code, options.toBundle());
来自AppCompactActivity的

答案 3 :(得分:0)

我认为使用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);
            }

这对我有用! 谢谢。