我已经为我的应用实现了共享元素转换,其中转换始于主屏幕上ViewPager中的带有RecyclerView的Fragment中的图像,并扩展为全屏幻灯片浏览器视图,再次在ViewPager中的Fragment中。这一切都正常工作,除了如果图像没有完全可见,它会在扩展到全屏之前覆盖TabBar。以下是发生的情况:
我的过渡效果如下:
<?xml version="1.0" encoding="utf-8"?>
<fade xmlns:android="http://schemas.android.com/apk/res/android">
<targets>
<target android:excludeId="@android:id/statusBarBackground"/>
<target android:excludeId="@android:id/navigationBarBackground"/>
</targets>
</fade>
退出:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together"
android:duration="500">
<fade>
<targets>
<target android:excludeId="@android:id/statusBarBackground" />
<target android:excludeId="@android:id/navigationBarBackground" />
</targets>
</fade>
</transitionSet>
在调用活动的共享元素回调中,我有这个:
View navigationBar = activity.findViewById(android.R.id.navigationBarBackground);
View statusBar = activity.findViewById(android.R.id.statusBarBackground);
if (navigationBar != null) {
names.add(navigationBar.getTransitionName());
sharedElements.put(navigationBar.getTransitionName(), navigationBar);
}
if (statusBar != null) {
names.add(statusBar.getTransitionName());
sharedElements.put(statusBar.getTransitionName(), statusBar);
}
最后,在 styles.xml 中为活动主题进行以下设置:
<item name="android:windowContentTransitions">true</item>
<item name="android:windowEnterTransition">@transition/details_window_enter_transition</item>
<item name="android:windowReturnTransition">@transition/details_window_return_transition</item>
我并不完全理解如何在转场时排除工具栏 (或操作栏) 而不出现重叠。也许一种方法是以某种方式强制将图像裁剪在顶部,这样当在工具栏下面时它不会变得完全可见,并且仅从可见矩形扩展。
我尝试将 <target android:excludeId="@id/action_bar_container"/>
添加到动画的目标中,但仍然发生相同的事情。
欢迎任何建议。
windowSharedElementsUseOverlay
,那么你可以使用我的解决方案。https://dev59.com/SlcP5IYBdhLWcg3wYpDi#64183340 - Abhinav Chauhan