2016-12-31 2 views
0

Я хочу реализовать пользовательский переход 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(). Эта структура как-то обрабатывает применение этого возвратного перехода в вызываемой активности не в вызывающем.

Итак, мне интересно, есть ли альтернатива?

ответ

0

Наконец, я нашел ответ на свой вопрос. Как я сказал позже, у нас есть только два сценария, поэтому я реализовал второй. В этом случае мы можем применить шаблон публикации-подписки, таким образом, он позволяет извлекать данные из первого действия и отправлять запрошенные данные во второе действие. Пока у меня есть соответствующие данные во втором действии, я могу оживить изображение до его положения в первом действии.

Чтобы реализовать шаблон публикации, я использовал Otto, который представляет собой шину событий, которая обеспечивает механизм, который вы можете использовать для связи с различными частями вашего приложения.

Вы можете найти реализацию этой идеи here. Также вы можете найти образец использования собственных переходов.

Смежные вопросы