2016-05-05 6 views
1

Если у меня есть два Activities A и B, оба имеют общий ImageView, я хотел бы иметь следующие переходы разыгрывают:SharedElementTransition и ContentTransition с задержкой времени

При переходе от Activity А до Б, я хочу, чтобы начать SharedElementTransition затем один раз, что заканчивается, запустите ContentTransition из Activity B.

При переходе от Activity B обратно в А, я хочу, чтобы начать ContentTransition из Activity в тот раз, что заканчивается, начать SharedElementTransition, которая восходит к Activity A

Как установить это время задержки Transitions? Я предполагаю, что вам нужен какой-то Callback Listeners, но я просто не уверен, какие из них использовать.

ответ

2

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

Во-первых, вам нужно будет использовать SharedElementCallback

Используя общий элемент обратного вызова, вы будете в состоянии определить, когда общий элемент завершения перехода (между прочим). Это было бы идеальным местом для выполнения другого перехода, как вы называете «переход контента». Таким образом, после перехода активного элемента активности B, как завершено, выполните переход содержимого.

И наоборот, выполнение перехода до перехода общего элемента будет немного сложнее. Для этого вам нужно будет добавить начальную задержку для перехода общего элемента. Один из способов добиться этого будет примерно таким:

getWindow().getSharedElementReenterTransition().setDuration(500); 

Переходы также могут быть определены в XML.

Во-вторых, вы должны прочитать на

onEnterAnimationComplete()

, которая является частью AppCompatActivity. Вы можете переопределить эту функцию в Activity A. Этот обратный вызов вызывается, когда Enter Transition для активности завершен. Это не то же самое, что переход с общим элементом. Это, по умолчанию, означает постепенное исчезновение/исчезновение, происходящее с действиями, исключая представления, связанные с переходом общего элемента.

Таким образом, в теории, вы можете:

  1. установить задержку запуска в Reenter общего элемента переход
  2. обнаружить, когда переход Activity A в блоке завершен и запустить собственный «переход контента»

Если вы используете тайминги (продолжительность задержки запуска и анимации), это будет работать.

Переходы с использованием общих элементов приходят с довольно крутой кривой обучения, потому что есть несколько движущихся частей, не предназначенных для каламбуров. Я рекомендую this read в качестве отправной точки.

Вы должны также прочитать на встроенном в деятельности переходов, таких как Explode(), Slide() и Fade()

Они могут быть использованы как «Content Transitions» в тандеме с общими элементами переходов для создания некоторых довольно ловкий материал.

0

Для этого не существует обратных вызовов. И нет прямого способа сделать это. Извините.

+1

У вас есть какие-либо объяснения, почему это не просто? Также, что делают разработчики приложений, чтобы снять это. Они должны что-то делать. – toobsco42

+0

У вас есть пример приложения, которое это делает? – roiberg

+0

Я понял, что случилось. Я добавил startDelay и продолжительность некоторых переходов, которые отбрасывали все время. При правильном использовании эти два атрибута будут определять время, которое вам нужно. Также я использовал windowExitTransition вместо windowReturnTransition, который отбросил вещи. – toobsco42