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

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

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

Image


person Eugen    schedule 07.02.2015    source источник
comment
android.transition.Scene ?   -  person pskink    schedule 07.02.2015


Ответы (1)


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

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

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

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

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

Переход, который вы захотите использовать, — это @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);
person George Mount    schedule 08.02.2015
comment
У меня есть хорошие новости и плохие новости. Хорошей новостью является то, что я понял, как заставить работать переходы вашего приложения. Плохая новость заключается в том, что это немного hokey! И переход затухания, и ChangeTransform добавляют представления к наложению. Я не верю, что есть какая-то гарантия порядка этих дополнений. Это просто работает, если вы инвертируете добавление их в набор (сначала затухание, а затем совместное использование). Переходное имя также было применено к неправильному элементу (контейнеру imageView), поэтому ChangeImageTransform не смог с ним работать. - person George Mount; 09.02.2015
comment
Я предлагаю проверить эту библиотеку на наличие переходов: github.com/guerwan/TransitionsBackport - person android developer; 30.06.2015
comment
Мне нравятся эти ответы, но этот переход не соответствует всем устройствам Android. Возможная причина? - person GvSharma; 31.10.2017