Подтвердить что ты не робот

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

Скажем, я использую подход на основе представления для разработки приложения Android, например, описанного в следующей статье: http://corner.squareup.com/2014/10/advocating-against-android-fragments.html

Итак, теперь у меня есть два полноэкранных режима. Один из них виден и содержит сетку изображений. Другой скрыт и представляет собой подробный вид отображаемого изображения. Без переходов при щелчке изображения в сетке сетка будет скрыта, и будет показан подробный вид. Теперь, если я хочу иметь что-то похожее на переход общего элемента между маленьким изображением в виде сетки и большим изображением в подробном представлении. Возможно ли подобное?

Image

4b9b3361

Ответ 1

Да, переходы позволяют это.

В вашем примере у вас есть как сетка, так и подробные представления уже в вашей иерархии. Чтобы использовать переходы, он будет работать лучше, если подробное представление не начинается в иерархии представления. Вам нужно обменять два вида.

Есть два (похожих) способа сделать это. Первый - иметь вид сетки в сцене. Затем используйте TransitionManager.go(detailScene, переход).

Второй способ - использовать TransitionManager.beginDelayedTransition, а затем поменять детальный макет для макета сетки.

Важно, чтобы общие представления имели что-то общее. Обычно это идентификатор вида или имя перехода. Эта ссылка укажет системе перехода, что, хотя представления представляют собой разные экземпляры.

Переход, который вы хотите использовать, - @android: переход/перемещение. Он объединяет 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);