Android共享元素转换:英雄视图在其他

时间:2016-04-30 18:26:58

标签: android shared-element-transition

请观看此视频,其中显示了共享元素活动转换。 它是从列表活动到详细活动的过渡。

[视频链接不再有效]

正如您所见,图像视图会在标签前面绘制。

我期望的是在imageview上以字体绘制标签并在整个过渡过程中淡出(这样在动画结束时它们就会消失)。

似乎唯一可行的做法是将windowSharedElementsUseOverlay设置为true, 但这有其他丑陋的影响,所以这似乎不是一个选择。

最常建议的方法是在转换本身中包含选项卡,但问题是详细信息活动中没有选项卡,因此无法共享它们。

代码: 我开始这样的细节活动:

options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, pairs);
ActivityCompat.startActivity(activity, subActivity, options.toBundle());

3 个答案:

答案 0 :(得分:2)

我相信您可能需要从过渡动画中排除而不是包含标签布局。

因此,在列表活动的onCreate中,请添加:

Transition fade = new Fade();
fade.excludeTarget(R.id.tab, true); // use appropriate id for you tab
getWindow().setExitTransition(fade);
getWindow().setEnterTransition(fade); // try getWindow().setReenterTransition(fade); instead

绝对看看Alex Lockwood对How do I prevent the status bar and navigation bar from animating during an activity scene animation transition?的答案,他在这个问题上给出了更深入但更易于理解的解释。您可能还想考虑在该帖子中添加/实施解决方案。

答案 1 :(得分:1)

你应该试试这个:

在exiting活动上,调用getWindow()。setExitTransition(null);

在输入活动中,调用getWindow()。setEnterTransition(null);

它可以防止退出活动的淡出和进入活动的淡入,从而消除明显的眨眼效果并使过渡平稳。

答案 2 :(得分:1)

我的调用活动中有一个tablayout和一个工具栏,每次进行转换时,图像都会显示在tablayout和工具栏的顶部,使转换看起来不整洁。

我通过在我的被调用活动中添加“虚拟”tablayout和“虚拟”工具栏来非常优雅地解决了这个问题。 “虚拟”元素不可见,因此它不会影响我的被调用活动的布局,但如果添加它们,过渡效果将正常工作。

                <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar2"
                    android:transitionName="toolbar"
                    android:visibility="gone"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize" />

                <android.support.design.widget.TabLayout
                    android:id="@+id/sliding_tabs"
                    android:layout_width="match_parent"
                    android:layout_height="60dp"
                    android:visibility="gone"
                    android:transitionName="tab"
                    ></android.support.design.widget.TabLayout>

然后我在我的过渡中添加了tablayout和工具栏作为一对:

        Pair<View, String> p4 = Pair.create(getActivity().findViewById(R.id.sliding_tabs), "tab");
        Pair<View, String> p5 = Pair.create(getActivity().findViewById(R.id.toolbar), "toolbar");
        Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), p1, p2, p3, p4, p5).toBundle();