当前位置: 首页 > 知识库问答 >
问题:

Android共享元素转换:英雄视图在其他元素前面绘制

微生耘豪
2023-03-14

请看这段显示共享元素活动转换的视频。这是从列表活动到详细信息活动的过渡。

[视频链接不再工作]

如您所见,imageview绘制在选项卡前面。

我所期望的是选项卡在imageview上以字体绘制,并在整个转换过程中淡出(以便在动画结束时它们消失)。

唯一有效的方法是将windowSharedElementsUseOverlay设置为true,但这会产生其他不好的效果,因此这似乎不是一个选项。

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

代码:我按如下方式启动详细信息活动:

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

共有3个答案

司寇旺
2023-03-14

我的呼叫活动中同时有一个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();
仇和蔼
2023-03-14

您应该尝试以下操作:在退出的活动中,调用getWindow()。setExitTransition(空);

在输入活动时,调用getWindow(). setEnTransition(null);

它将防止退出活动的淡出和进入活动的淡入,这消除了明显的闪烁效果,使过渡平滑。

欧阳昊阳
2023-03-14

我相信您可能需要从过渡动画中排除而不是包括选项卡布局。

因此,在列表活动的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关于如何防止状态栏和导航栏在活动场景动画转换期间设置动画的回答?在那里,他对这个话题作了更深入、更深入但易于理解的解释。您可能还想考虑在该帖子中添加/实现解决方案。

 类似资料:
  • 我一直在尝试实现这个共享元素转换,并在单击转换时不断出现“java.lang.IllegalArgumentException:共享元素不能为null”错误。请帮忙。 这是下面给出的MainActive onCreate方法。请检查我的代码。 这是recyclerView的onClickListener。 图像的过渡名称相同。这里的bug修复在使用共享元素的活动转换中出现问题并不是问题所在。 我卡

  • 我正在实现一个gallery应用程序,它有一个片段,其中包含一个带有图像的RecyclerView,单击一个图像,我会转到ViewPager循环浏览图像 目前,我正试图实现像本视频中那样的入门动画。问题是动画不起作用,我显然遗漏了一些东西(只是显示与转换相关的代码): 查看页面: GridAdapter: 在MainActivity中,我在onClick中实例化ViewPagerFragment:

  • 问题内容: 我有以下HTML结构: 我只想选择之前的内容。我怎样才能做到这一点?在我的内容中,越来越多的东西,因此解决方案应该是通用的。 问题答案: 据我所知,CSS没有提供将 在* 选择器 之前定位的任何选择器。您能否将其选择为()之后的? * 如您所见,这可能是您依赖CSS时可以使用的最佳选择器,尽管您可以轻松地向之前的每个类添加一个类。这样可以避免您在另一个段落和段落节之前有一个段落节的情况

  • 问题内容: 在Matplotlib中,我按如下所示制作虚线网格: 但是,我无法找出如何(甚至可能)在其他图形元素(如条形图)后面绘制网格线。更改添加网格的顺序与添加其他元素的顺序没有区别。 是否有可能使网格线出现在其他所有内容的后面? 问题答案: 据此-http://matplotlib.1069221.n5.nabble.com/axis-elements-and-zorder- td5346.

  • 我能够使用。不过,我想让文本在转换时放大。我可以看到材料设计示例在名片转换中放大了文本“Alphonso Engelking”。 我尝试在目标TextView上设置缩放属性,并使用ChangeTransform共享元素转换,但它不缩放,文本在转换时最终被截断。 如何使用共享元素转换缩放文本视图?

  • 我希望采用Glide库来代替通用图像加载器,但在共享元素转换方面遇到了问题。 在我的简单沙盒中,我使用UIL创建了以下过渡:https://dl.dropboxusercontent.com/u/97787025/device-2015-06-18-113333.mp4 非常简单,而且效果很好。但当我使用Glide时,它看起来不太好看:https://dl.dropboxusercontent.c