Я хочу реализовать пользовательский переход Pre-Lollipop
. У меня есть общий элемент в обоих действиях (A
и B
), то есть простой ImageView
. Мои пользовательские переходы с общими элементами работают по тому же принципу, что и переходы native
. Прежде всего, я устанавливаю для фона B
активность прозрачным, затем я фиксирую начальное состояние совместно используемого элемента и передаю эти данные в B
. В B
Я фиксирую конечное состояние общего представления и создаю Animator
, который будет анимировать представление между двумя состояниями, конечно, что анимация происходит в активности B
.
Как обрабатывать обратный переход с общими элементами?
На данный момент, если у меня есть один и тот же общий элемент в обоих действиях, все идеально, и я могу применить соответствующий возврат. Однако, когда я хочу реализовать какую-то галерею (когда вы можете перемещать изображения влево и вправо в B
), у меня есть проблема с возвратным переходом. В этом случае оба действия имеют один и тот же источник данных, поэтому пользователь может просто изменить общий элемент в действии B
. Итак, что, если я изменю этот общий элемент во втором действии? Тогда, очевидно, чтобы реализовать переход возврата, мне нужно знать размер и положение этого элемента в активности A
, правильно?
В принципе, у нас есть только 2
сценарии (поправьте меня, если я ошибаюсь), чтобы сделать это:
- PASS состояние этого общего элемента от
B
кA
активности с использованиемonActivityResult
обратного вызова, и применить анимация возврата вA
. - Как-то получить свойства общего элемента с
A
и реализовать анимацию возврата вB
.
Кроме того, я также должен перерисовывать RecyclerView
или независимо от того, что хранит данные, используя requestLayout()
или invalidate()
метод.
Я знаю, что могу реализовать все эти вещи с помощью переходов native
с использованием SharedElementCallback
callback и onActivityReenter()
. Эта структура как-то обрабатывает применение этого возвратного перехода в вызываемой активности не в вызывающем.
Итак, мне интересно, есть ли альтернатива?