Переход общего элемента Android между разными масштабами

Я следил за этой статьей блога о разработке Android, а вот его исходный код.

Демонстрация работает хорошо, однако обычно мы предпочитаем использовать масштаб centerCrop в списке изображений и использовать fitCenter в режиме детализации. Когда я изменяю код для достижения этой цели, переход не может иметь дело с изменением типа шкалы. При возврате из фрагмента детализации анимация начинается с неправильного типа масштаба.

Я нашел переход ChangeImageTransform. В документе говорится:

Этот переход захватывает матрицу ImageView до и после смены сцены и анимирует ее во время перехода.

В сочетании с ChangeBounds ChangeImageTransform позволяет объектам ImageView, которые изменяют размер, форму или ImageView.ScaleType, плавно анимировать содержимое.

Поэтому я изменил набор переходов:

<transitionSet
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="375"
    android:interpolator="@android:interpolator/fast_out_slow_in"
    android:transitionOrdering="together">
  <changeBounds/>
  <changeImageTransform/>
</transitionSet>

А вот анимация становится намного уродливее:

Как плавно переходить между разными типами масштаба?


person Chenhe    schedule 23.02.2020    source источник


Ответы (2)


Я следил за тем же проектом GridToPager и столкнулся с той же проблемой. Вот два изменения, которые сделали свое дело.

image_shared_element_transition.xml

<?xml version="1.0" encoding="utf-8"?>
<transitionSet
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="375"
    android:interpolator="@android:interpolator/fast_out_slow_in"
    android:transitionOrdering="together">
  <changeClipBounds/>
  <changeTransform/>
  <changeBounds/>
  <changeImageTransform/>
</transitionSet>

а также

Удалить атрибут android:clipChildren="false" из CardView в image_card.xml

person Sai    schedule 06.11.2020

При использовании ChangeBounds необходимо выполнить переход между элементами child и parent, чтобы переход работал правильно. Всякий раз, когда элемент входит из верхнего левого угла, как во втором видео, вы можете предположить, что родительский вид также не переходит. введите описание изображения здесь
Я хотел бы убедиться, что CardView также рассматривается как общий элемент, что означает, что вам нужно будет обновить макет второго фрагмента, чтобы ImageView находился внутри CardView.

Также обратите внимание, что каждому общему элементу требуется уникальное имя перехода... в прошлом это вызывало у меня проблемы.

person Joe Muller    schedule 23.02.2020
comment
Вместо этого я пытаюсь удалить оболочку CardView, но, к сожалению, проблема все еще существует. Кстати, демо также без проблем использует ChangeBounds. Я уверен, что имя перехода уникально, блог подчеркивает это. - person Chenhe; 23.02.2020