Android общий переход элемента между различными scaleType - PullRequest
0 голосов
/ 23 февраля 2020

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

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

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

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

В сочетании с ChangeBounds ChangeImageTransform позволяет ImageViews, которые изменяют размер, shape или 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>

Но анимация становится все более уродливой :

Как плавно преобразовать различные типы шкал?

1 Ответ

0 голосов
/ 23 февраля 2020

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

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

...