【发布时间】:2017-06-11 12:40:21
【问题描述】:
我已经为我的应用程序实现了共享元素转换,其中转换从主屏幕上 ViewPager 内的 Fragment(使用 RecyclerView)的图像开始,然后扩展到全屏画廊视图,再次在 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"/> 添加到动画的目标中,但同样的事情仍然发生。
欢迎提出任何建议。
【问题讨论】:
标签: android android-fragments android-animation shared-element-transition