Главный экран моего приложения содержит изображения в виде сетки. Когда пользователь выбирает изображение, детальное действие запускается с использованием перехода общего элемента, который анимирует выбранное изображение сетки в парное изображение, расположенное в CardView в подробном действии.
После обновления моего XML-макета подробного представления для включения CoordinatorLayout вместе с CollapsingToolbarLayout переход общего элемента перемещает представление изображения в неправильное место в действии деталей (действие «ввод»). Фреймворк, кажется, принимает смещение всего AppBarLayout и внутреннего CollapsingToobarLayout и анимирует приблизительное положение, в котором было бы изображение, если бы над CardView, содержащим целевое представление изображения, не было CollapsingToolBarLayout.
Проблема может быть продублирована в примере приложения cheesesquare Криса Бэйнса, добавив ImageView (с именем перехода) к любому один из 3 CardView в файле activity_detail.xml:
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:transitionName="sharedImage" />
а затем настройте переход общего элемента в onBindViewHolder в CheeseListFragment.java следующим образом:
@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);
}
Если вы запустите приложение и щелкните элемент списка сыра, вы увидите, как анимация перехода перемещает изображение на неправильное (слишком большое) смещение в окне целевого действия. По завершении анимации изображение "деформируется" в правильном положении.
Приветствуются любые мысли о возможных обходных решениях.