Android 与CoordinatorLayout和CollingToolBarLayout组合使用时,共享元素转换不起作用

Android 与CoordinatorLayout和CollingToolBarLayout组合使用时,共享元素转换不起作用,android,animation,android-coordinatorlayout,android-collapsingtoolbarlayout,shared-element-transition,Android,Animation,Android Coordinatorlayout,Android Collapsingtoolbarlayout,Shared Element Transition,我的应用程序主屏幕包含图像的网格视图。当用户 选择图像后,将使用共享元素启动详细信息活动 将选定栅格图像动画化为位于栅格中的成对图像的过渡 详细信息活动中的CardView 在升级我的详细视图XML布局以包括一个坐标布局之后 使用折叠工具栏布局时,共享元素转换将移动图像 查看详细信息活动中的错误位置(“输入”活动)。这个 框架似乎覆盖了整个AppBarLayout和内部布局的偏移量 折叠ToobarLayout并设置动画到图像的大致位置 如果在CardView上方没有折叠工具栏布局 包含目标图像

我的应用程序主屏幕包含图像的网格视图。当用户 选择图像后,将使用共享元素启动详细信息活动 将选定栅格图像动画化为位于栅格中的成对图像的过渡 详细信息活动中的CardView

在升级我的详细视图XML布局以包括一个坐标布局之后 使用折叠工具栏布局时,共享元素转换将移动图像 查看详细信息活动中的错误位置(“输入”活动)。这个 框架似乎覆盖了整个AppBarLayout和内部布局的偏移量 折叠ToobarLayout并设置动画到图像的大致位置 如果在CardView上方没有折叠工具栏布局 包含目标图像视图

这个问题可以通过添加 指向activity_detail.xml中3个CardView中任意一个的ImageView(带有transitionName):

<ImageView
 android:id="@+id/imageView"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:src="@mipmap/ic_launcher"
 android:transitionName="sharedImage" />
如果您运行应用程序,并单击cheese列表项,您将看到 过渡动画将图像移动到图像中不正确(过高)的偏移 目的地活动视图。动画完成后,将显示图像 “翘曲”到正确的位置


任何关于可能的解决方法的想法都是非常受欢迎的。

答案很简单,cheesesquare activity\u detail.xml布局,简而言之,如下所示

<android.support.design.widget.CoordinatorLayout 
    android:fitsSystemWindows="true"
    ...>

    <android.support.design.widget.AppBarLayout
        android:fitsSystemWindows="true"
        ...>

        <android.support.design.widget.CollapsingToolbarLayout
            android:fitsSystemWindows="true"
            ...>

            <ImageView
                android:fitsSystemWindows="true"
                ... />

            <android.support.v7.widget.Toolbar
                ... />

        </android.support.design.widget.CollapsingToolbarLayout>

     </android.support.design.widget.AppBarLayout>

     <android.support.v4.widget.NestedScrollView
         app:layout_behaviour="@string/appbar_scrolling_view_behaviour"
         ...>

</android.support.design.widget.CoordinatorLayout>

此布局的错误在于:android:fitsSystemWindows属性需要沿布局链向下传播到所有容器,并且在已发布的演示应用程序中,NestedScrollView缺少此属性。将NestedScrollView修改为

     <android.support.v4.widget.NestedScrollView
         app:layout_behaviour="@string/appbar_scrolling_view_behaviour"
         android:fitsSystemWindows="true"
         ...>


解决了这个问题。这可能应该在演示Github代码中更改。

已解决

如果任何人在使用由共享元素组成的协调器布局时遇到此错误,则在共享元素从上一个活动转换到包含协调器布局的活动期间,在转换动画期间错误地放置了共享元素。这是设计支持库版本com.android中的一个bug。支持:设计:22.2.0“

解决方案:

版本更改为com.android.support:design:23.1.0“内置.gradle(应用程序)


一切都应按预期完美运行。这对我来说是可行的,经过大量研究后找到了这个解决方案

很抱歉,Udit,但您的解决方案无法解决此问题。我刚刚用design:23.1.1对它进行了测试,它仍然显示出来。只需转到手机的开发者选项,将动画速度降低5倍,就可以看到扭曲。我的测试是在Nexus6API22(emulator)上进行的。向NestedScrollView添加fitSystemWindows属性修复了我在下面提到的问题。design 23.3.0仍然存在问题:(有解决方案吗?当我有一个类似于cheesesquare细节屏幕布局的布局时,导航栏和状态栏仍然会闪烁。如何解决共享元素转换的问题?答案可以在这篇文章中找到。我已经找到了解决此问题的方法,并且在我的报告中
     <android.support.v4.widget.NestedScrollView
         app:layout_behaviour="@string/appbar_scrolling_view_behaviour"
         android:fitsSystemWindows="true"
         ...>