Понимание активности обратных переходов

В настоящее время я использую пользовательский переход для общего элемента, когда запускаю действие B из действия A. Все работает отлично.

Я хочу использовать другой кастом Transition это не связано с какими-либо общими элементами для обратного перехода из действия B обратно в действие A. Однако у меня возникли проблемы с несколькими частями:

  1. Как мне сказать платформе, что обратный переход не включает какие-либо общие элементы?
  2. Каковы начальные и конечные значения для перехода в обратном переходе? Для входного перехода я в основном манипулировал представлениями действия B, поскольку они нарисованы поверх представления A. Что происходит в обратном переходе?

Ценю любую помощь, которую я могу получить!

РЕДАКТИРОВАТЬ:

Дальнейшее расследование показало, что мой обратный переход createAnimator даже не звонят, хотя я звоню setSharedElementReturnTransition, Но я знаю, что вызов set что-то делает, потому что теперь он не пытается изменить исходную анимацию ввода (поведение по умолчанию), а просто перекрывает два представления.

РЕДАКТИРОВАТЬ № 2:

Посмотрев на ответ Джорджа Маунта, я добавил

@Override
public void captureStartValues(TransitionValues transitionValues) {
    transitionValues.view.setVisibility(View.VISIBLE);
}

@Override
public void captureEndValues(TransitionValues transitionValues) {
    transitionValues.view.setVisibility(View.INVISIBLE);
}

Это теперь вызывает мой обратный переход createAnimator по крайней мере запустить, хотя анимация все еще странная. Почему видимость имеет значение?

2 ответа

Решение

Я на самом деле нашел виновника, который был причиной моего обратного перехода createAnimator не бежать. По-видимому, если среда перехода считает, что начальное и конечное состояния для переходных представлений одинаковы, она не создаст аниматора. Таким образом, добавив некоторые фиктивные, но разные значения в captureStartState а также captureEndState наконец, заставил мой обратный переход работать правильно.

  1. Вы должны установить SharedElementCallback и в onMapSharedElements очистить карту общих элементов. Это исключит общий элемент из вашего перехода.
  2. Это зависит от того, о каком переходе вы говорите. В частности, значениями конца и конца возвращаемого перехода являются View.VISIBLE и View.INVISIBLE. Но при возврате происходит несколько переходов:

Возвратный переход: неиспользуемые элементы удаляются со сцены в действии B путем изменения их видимости.

Переход возврата общего элемента: общий элемент в действии B начинается там, где он находится, когда finishAfterTransition вызывается и заканчивается там, где действие А говорит, что совместно используемый элемент. Это можно отрегулировать с помощью SharedElementCallback"s onSharedElementStart а также onSharedElementEnd, которые вызываются в обратном порядке при возврате.

Повторно введите переход: неиспользуемые представления элементов из Действия A изменяют их видимость.

Переход в общий элемент повторного входа: обычно ничего, но общий элемент может сделать что-то особенное после того, как он попадет в действие А.

Другие вопросы по тегам