Переходы общих элементов между представлениями (не действиями или фрагментами)

Допустим, я использую подход, основанный на представлении, для разработки приложения 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);
Другие вопросы по тегам