Общий переход элементов между фрагментами, которые относятся к разным видам деятельности в леденце на Android

У меня есть общий элемент во фрагменте, принадлежащем одному Activity.

Я хочу сделать переход общего элемента в Android Lollipop с элементом, который является частью фрагмента, принадлежащего другому действию.

Является ли это возможным?

Как я могу это достичь?

Возможно.

Во-первых, когда вы обнаружите в своем фрагменте, что переход должен произойти, создайте массив Pair<View, String> который вы заполняете с видом и именем перехода.

Например, если вы хотите анимировать изображение с уменьшенным изображением на полную ширину:

  Pair[] pairs = new Pair[1]; pairs[0] = new Pair(thumbnailImage, "THUMBNAIL_IMAGE"); 

Во-вторых, передайте этот массив активности фрагмента, чтобы он мог инициировать фактический переход. (Я использую Otto для передачи этого события, вы можете использовать обычные обратные вызовы, если хотите).

Затем в своей деятельности начните вторую операцию. (Я создал простой способ для этого)

 public static void transitionExpand(Activity activity, Intent intent, Pair<View, String>[] sharedElements) { ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements); ActivityCompat.startActivity(activity, intent, options.toBundle()); } 

Во втором упражнении вы можете добавить фрагмент обычным способом. Затем во втором onViewCreated() вы можете вызвать:

 ViewCompat.setTransitionName(fullWidthImage, "THUMBNAIL_IMAGE"); 

Надеюсь, поможет

ОБНОВЛЕНИЕ: Начиная с версии 25.1.1 библиотеки поддержки эти же методы находятся в поддерживающих фрагментах. Ссылки на документы: Fragment.postponeEnterTransition () и Fragment.startPostponedEnterTransition ()

ОРИГИНАЛЬНЫЙ ОТВЕТ:

Это возможно даже при динамически добавленном фрагменте во втором действии.

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

В onCreate второго вызова Activity onCreate postponeEnterTransition() (или supportPostponeEnterTransition() если вы используете библиотеку поддержки). Динамически добавьте свой фрагмент к этой операции. В конце метода onCreateView в Fragment, который вы динамически добавляете, вызовите getActivity().startPostponedEnterTransition() .

Это, конечно, предполагает, что вы сделали все остальное, необходимое для перехода на общий элемент, но я считаю, что эти методы – это то, что вы ищете с вашим вопросом.

Благодарим блог @ alex-lockwood за то, что он показал мне свет.