У меня есть общий элемент во фрагменте, принадлежащем одному 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 за то, что он показал мне свет.