我已经为我的应用实现了共享元素转换,其中转换从主屏幕上ViewPager内的Fragment(带有RecyclerView)的图像开始,然后再扩展到ViewPager的Fragment中的全屏画廊 View 。一切正常,除了如果图像不完全可见,它会在扩展到全屏之前放在TabBar顶部。这是正在发生的事情:

Android共享元素过渡工具栏重叠-LMLPHP

我的输入过渡看起来像这样:

<?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>

在调用 Activity 的共享元素回调中,我得到了以下信息:
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中作为 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>

我真的不明白如何在不发生重叠的情况下将过渡工具栏(或操作栏)排除在外。可能的方法是以某种方式强制将图像剪裁到顶部,以使它在工具栏下方时不会完全可见,而仅从可见矩形展开。

我尝试将<target android:excludeId="@id/action_bar_container"/>添加到动画的目标,但是同一件事仍然发生。

欢迎任何建议。

最佳答案

我在项目中发现了类似的问题,请按照您的风格添加以下代码。

<item name="android:windowSharedElementsUseOverlay">false</item>

这个对我有用。

关于Android共享元素过渡工具栏重叠,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44483981/

10-09 03:43