Android共享元素过渡ToolBar重叠

Geo*_*rgi 6 android android-animation android-fragments shared-element-transition

我为我的应用程序实现了共享元素转换,其中转换从主屏幕上的ViewPager内的Fragment(使用RecyclerView)的图像开始,并再次扩展到全屏幕库视图,再次位于ViewPager的片段中.这一切都运行正常,但如果图像不完全可见,它会在扩展到全屏之前进入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>
Run Code Online (Sandbox Code Playgroud)

并退出:

<?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>
Run Code Online (Sandbox Code Playgroud)

在调用活动的共享元素回调中,我得到了这个:

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);
}
Run Code Online (Sandbox Code Playgroud)

最后在styles.xml中为activity主题:

<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>
Run Code Online (Sandbox Code Playgroud)

我真的不明白如何通过转换排除工具栏(或操作栏)而不会出现这种重叠.也许一种方法是以某种方式强制图像被剪裁在顶部,这样当它在ToolBar下并且仅从可见矩形展开时它不会完全可见.

我已经尝试添加<target android:excludeId="@id/action_bar_container"/>动画的目标,但同样的事情仍然发生.

欢迎任何建议.

Cha*_*ung 9

我在我的项目中发现了类似的问题.在你的风格中添加下面的代码.

<item name="android:windowSharedElementsUseOverlay">false</item>
Run Code Online (Sandbox Code Playgroud)

这个对我有用.