Переход на общий элемент Android: представление героя обращается к другому
Посмотрите на это видео, показывающее переход активности общих элементов.
Это переход от активности списка к детальному действию.
[Видео ссылка больше не работает]
Как вы видите, изображение просматривается перед вкладками.
То, что я ожидаю, это вкладки, которые нарисованы в шрифте на изображении и исчезают во время перехода (так что в конце анимации они исчезли).
Единственное, что работает, это установить windowSharedElementsUseOverlay
в true,
но у этого есть другие уродливые эффекты, так что, похоже, это не вариант.
Наиболее часто предлагаемый подход заключается в том, чтобы включать вкладки в сам переход, но проблема в том, что вкладки не присутствуют в подробном действии, поэтому они не могут быть разделены.
код:
Я начинаю детальное действие следующим образом:
options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, pairs);
ActivityCompat.startActivity(activity, subActivity, options.toBundle());
Ответы
Ответ 1
Я считаю, что вам может понадобиться исключить, а не включать макет вкладки из анимации перехода.
Итак, в onCreate
активности вашего списка включите:
Transition fade = new Fade();
fade.excludeTarget(R.id.tab, true); // use appropriate id for you tab
getWindow().setExitTransition(fade);
getWindow().setEnterTransition(fade); // try getWindow().setReenterTransition(fade); instead
Определенно взгляните на ответ Алекс Локвуд на Как предотвратить отображение строки состояния и навигационной панели во время перехода анимации сцены активности?, где он дает больше и более углубленное, но усваиваемое объяснение по этой теме. Вы также можете рассмотреть возможность добавления/внедрения решения в этом сообщении.
Ответ 2
В моей активности вызова есть как tablayout, так и панель инструментов внутри, и каждый раз, когда я делал переход, изображение отображалось поверх обоих tablayout и панели инструментов, делая переход выглядящим неопрятным.
Я исправил проблему довольно элегантно, просто добавив вкладку "dummy" tablayout и панель инструментов "dummy" в моей вызываемой деятельности. Элементы "dummy" не отображаются, поэтому это не влияет на макет моей вызываемой активности, но эффект перехода будет работать правильно, если вы добавите их.
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar2"
android:transitionName="toolbar"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
<android.support.design.widget.TabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="60dp"
android:visibility="gone"
android:transitionName="tab"
></android.support.design.widget.TabLayout>
Затем я добавил tablayout и панель инструментов в качестве пары в моем переходе:
Pair<View, String> p4 = Pair.create(getActivity().findViewById(R.id.sliding_tabs), "tab");
Pair<View, String> p5 = Pair.create(getActivity().findViewById(R.id.toolbar), "toolbar");
Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), p1, p2, p3, p4, p5).toBundle();
Ответ 3
Вы должны попробовать следующее:
При выходе из операции вызовите getWindow(). SetExitTransition (null);
В процессе ввода вызовите getWindow(). setEnterTransition (null);
Это предотвратит постепенное исчезновение выходящей активности и исчезновение входящей активности, которая устраняет кажущийся мигающий эффект и делает переход гладким.