Переходы общих элементов между представлениями (не действиями или фрагментами)
Допустим, я использую подход, основанный на представлении, для разработки приложения Android, как, например, описано в следующей статье: http://corner.squareup.com/2014/10/advocating-against-android-fragments.html
Так что теперь у меня есть два полноэкранных просмотра. Один виден и содержит сетку изображений. Другой скрыт и представляет собой подробный вид изображения, которое нужно щелкнуть. Без переходов по щелчку изображения в сетке вид сетки будет скрыт и будет показан подробный вид. Теперь, что, если я хочу иметь что-то похожее на переход общего элемента между маленьким изображением в виде сетки и большим изображением в подробном представлении. Возможно ли что-то подобное?
1 ответ
Да, переходы позволяют это.
В вашем примере у вас уже есть сетка и подробные виды уже в вашей иерархии. Чтобы использовать переходы, это будет работать лучше, если подробное представление не запускается в иерархии представления. Вам нужно обменяться двумя взглядами.
Есть два (похожих) способа сделать это. Первое - иметь вид сетки в сцене. Затем используйте TransitionManager.go(detailScene, transition).
Второй способ - использовать TransitionManager.beginDelayedTransition, а затем поменять местами детальный макет для макета сетки.
Важно, чтобы общие взгляды имели что-то общее. Обычно это View ID или transitionName. Эта связь скажет системе перехода, что, хотя представления являются разными экземплярами.
Переход, который вы хотите использовать, - @android:transition/move. Он объединяет ChangBounds, ChangeTransform, ChangeImageTransform и ChangeClipBounds. Вам нужно настроить таргетинг на общие представления элементов. Похоже, вам понадобится еще один переход (Fade?) Для входа и / или выхода из представлений.
Что-то вроде этого:
TransitionSet shared = ...
shared.addTarget("sharedName");
gridElement.setTransitionName("sharedName");
Fade fade = new Fade();
fade.excludeTarget("sharedName", true);
TransitionSet set = new TransitionSet();
set.addTransition(shared)
.addTransition(fade);
TransitionManager.go(detailScene, set);