我的应用程序主屏幕包含一组图像的网格视图。当用户选择图像时,将使用共享元素转换启动详细活动,该转换将所选网格图像动画到详细活动中的 CardView 中配对的图像。
在升级详细视图 XML 布局以包括 CoordinatorLayout 和 CollapsingToolbarLayout 后,共享元素转换将图像视图移动到详细活动(“进入”活动)中错误的位置。框架似乎忽略了整个 AppBarLayout 和内部 CollapsingToobarLayout 的偏移量,并将动画移动到目标图像视图所在的 CardView 上面没有 CollapsingToolBarLayout 的情况下图像大致的位置。
通过向 activity_detail.xml 的任何一个 CardView 添加 ImageView(具有 transitionName),可以在 Chris Banes 的 cheesesquare 示例应用程序 中复制此问题:
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:transitionName="sharedImage" />
然后在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);
}
如果您运行该应用程序并点击奶酪列表项,您将看到转换动画将图像移动到目标活动视图中过高的偏移量。一旦动画完成,图像将会“扭曲”到正确的位置。如果您有任何可能的解决方法,请随时分享。