Я пытаюсь анимировать 2 простых представления из выбранного элемента в RecyclerView в новый фрагмент. Я рассмотрел множество примеров анимации разделяемых элементов из одного действия в другую, но очень мало примеров анимации общего элемента из одного фрагмента в другой фрагмент в пределах одного действия. Это почти работает.
Вот моя структура.
Деятельность
- Полный экран Fragment1 с RecyclerView
- Полноэкранный фрагмент2 с подробностями
Когда пользователь выбирает элемент в RecyclerView в Fragment1, я заменяю Fragment1 на Fragment2, который имеет вид с общими элементами в нем в разных положениях и размерах.
Там немного хитрости, чтобы заставить его работать, вы должны убедиться, что ваше имя перехода уникально для каждого элемента в вашем списке, и, конечно, что имя перехода должно совпадать с именем перехода из элемента Fragment2 для воспроизведения анимации, У меня есть эта часть работы, когда я выбираю элемент, 2 общих представления делают анимацию, просто не совсем точно, как вы могли бы ожидать, когда делаете это между двумя действиями.
Если я выбираю элемент в нижней части экрана, он рисует "Просмотр для фрагмента2" и анимирует 2 общих представления, как если бы они находились в элементе в верхней части экрана. Сложно объяснить. Вот несколько фотографий
Fragment1
FRAGMENT2
В обоих фрагментах я устанавливаю следующие
setSharedElementEnterTransition(new ChangeBounds());
setSharedElementReturnTransition(new ChangeBounds());
setAllowEnterTransitionOverlap(true);
setAllowReturnTransitionOverlap(true);
Также в своей родительской активности в onCreate() я установил
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Любая идея, почему мои общие анимации элементов начинаются в верхней части экрана даже тогда, когда они запускались в выбранном элементе в нижней части экрана?