Android 与CoordinatorLayout和CollingToolBarLayout组合使用时,共享元素转换不起作用
我的应用程序主屏幕包含图像的网格视图。当用户 选择图像后,将使用共享元素启动详细信息活动 将选定栅格图像动画化为位于栅格中的成对图像的过渡 详细信息活动中的CardView 在升级我的详细视图XML布局以包括一个坐标布局之后 使用折叠工具栏布局时,共享元素转换将移动图像 查看详细信息活动中的错误位置(“输入”活动)。这个 框架似乎覆盖了整个AppBarLayout和内部布局的偏移量 折叠ToobarLayout并设置动画到图像的大致位置 如果在CardView上方没有折叠工具栏布局 包含目标图像视图 这个问题可以通过添加 指向activity_detail.xml中3个CardView中任意一个的ImageView(带有transitionName):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上方没有折叠工具栏布局 包含目标图像
<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"
...>