请观看此视频,其中显示了共享元素活动转换。 它是从列表活动到详细活动的过渡。
[视频链接不再有效]
正如您所见,图像视图会在标签前面绘制。
我期望的是在imageview上以字体绘制标签并在整个过渡过程中淡出(这样在动画结束时它们就会消失)。
似乎唯一可行的做法是将windowSharedElementsUseOverlay
设置为true,
但这有其他丑陋的影响,所以这似乎不是一个选择。
最常建议的方法是在转换本身中包含选项卡,但问题是详细信息活动中没有选项卡,因此无法共享它们。
代码: 我开始这样的细节活动:
options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, pairs);
ActivityCompat.startActivity(activity, subActivity, options.toBundle());
答案 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();