与CoordinatorLayout和CollapsingToolbarLayout结合使用时,共享元素转换不起作用

我的应用程序主屏幕包含图像的网格视图。 当用户选择图像时,使用共享元素转换开始细节活动,该共享元素转换将所选择的网格图像animation化为位于细节活动中的CardView中的配对图像。

升级我的详细视图XML布局以包含CoordinatorLayout以及CollapsingToolbarLayout后,共享元素转换将图像视图移动到详细活动中的错误位置(“enter”活动)。 如果在包含目标图像视图的CardView上方没有CollapsingToolBarLayout,框架似乎会将整个AppBarLayout和内部CollapsingToobarLayout的偏移量和animation放大到图像的大致位置。

通过将activityView (带有transitionName)添加到activity_detail.xml中的3个CardView中的任何一个,可以在Chris Banes的cheesesquare示例应用程序中复制该问题:

 

然后在CheeseListFragment.java中的onBindViewHolder中设置共享元素转换,如下所示:

 @Override public void onBindViewHolder(final ViewHolder holder, int position) { holder.mBoundString = mValues.get(position); holder.mTextView.setText(mValues.get(position)); holder.mView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Context context = v.getContext(); Intent intent = new Intent(context, CheeseDetailActivity.class); intent.putExtra(CheeseDetailActivity.EXTRA_NAME, holder.mBoundString); holder.mImageView.setTransitionName("sharedImage"); ActivityOptionsCompat options = ActivityOptionsCompat. makeSceneTransitionAnimation( getActivity(v.getContext()), holder.mImageView, "sharedImage"); ActivityCompat.StartActivity((MyActivity) context, intent, options.toBundle()); } }); Glide.with(holder.mImageView.getContext()) .load(Cheeses.getRandomCheeseDrawable()) .fitCenter() .into(holder.mImageView); } 

如果运行应用程序,并单击奶酪列表项,您将了解过渡animation如何将图像移动到目标活动视图中的错误(太高)偏移。 animation完成后,图像将“扭曲”到正确的位置。

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

答案很简单,cheesesquare activity_detail.xml布局,简而言之,看起来像这样……

          

这种布局有什么问题,android:fitsSystemWindows属性需要沿着布局链传播到所有容器,并且在已发布的演示应用程序中,NestedScrollView缺少此属性。 修改NestedScrollView

   

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

解决了!

如果任何人正面临这样的错误,他们正在使用包含共享元素的协调器布局,共享元素在共享元素从上一个活动转换到包含协调器布局的活动期间,在转换animation期间被错误地放置。 这是设计支持库版本“com.android.support:design:22.2.0”中的错误

解:

在build.gradle(app)中将版本更改 “com.android.support:design:23.1.0”

一切都应该如预期的那样完美。 这对我有用,经过大量研究后发现了这个解决方案。