FEATURE_ACTIVITY_TRANSITIONS против FEATURE_CONTENT_TRANSITIONS

У меня возникли проблемы с пониманием разницы между этими двумя Window флаги и я не уверен на 100%, когда каждый из них должен использоваться и почему.

Документы для Window.FEATURE_ACTIVITY_TRANSITIONS сказать:

Позволяет операциям запускать переходы действий посредством отправки или получения пакета ActivityOptions, созданного с помощью makeSceneTransitionAnimation(Activity, Pair[]) или же makeSceneTransitionAnimation(Activity, View, String),

И документы для Window.FEATURE_CONTENT_TRANSITIONS сказать:

Флаг для запроса изменения содержимого окна должен быть анимирован с использованием TransitionManager,

TransitionManager устанавливается с помощью setTransitionManager(TransitionManager), Если ни один не установлен, по умолчанию TransitionManager будет использоваться.

В документации говорится, что следующее Window методы требуют FEATURE_ACTIVITY_TRANSITIONS флаг должен быть включен, но ничего не говорится о том, FEATURE_CONTENT_TRANSITIONS необходимо также включить (обратите внимание, что в соответствии с исходным кодом, FEATURE_ACTIVITY_TRANSITIONS является true а также FEATURE_CONTENT_TRANSITIONS является false для тематических приложений по умолчанию):

  • get{Enter,Exit,Return,Reenter}Transition()
  • set{Enter,Exit,Return,Reenter}Transition()
  • getSharedElement{Enter,Exit,Return,Reenter}Transition()
  • setSharedElement{Enter,Exit,Return,Reenter}Transition()
  • getTransitionBackgroundFadeDuration()
  • setTransitionBackgroundFadeDuration()

Другими словами, похоже, что на основе этой информации FEATURE_ACTIVITY_TRANSITIONS это флаг функции, который приложения должны будут включить для использования новых API-интерфейсов Lollipop Activity Transition. Однако меня смущает то, что в этой статье с сайта разработчиков Android говорится, что FEATURE_CONTENT_TRANSITIONS требуется для реализации пользовательских переходов активности.

Итак, вот мои вопросы:

  1. В чем разница между этими двумя флагами? В чем разница между "переходом активности" и "переходом контента" в этом контексте?
  2. Почему FEATURE_ACTIVITY_TRANSITIONS включен и FEATURE_CONTENT_TRANSITIONS по умолчанию отключен? Когда это позволяет FEATURE_CONTENT_TRANSITIONS флаг на самом деле требуется?
  3. Будет ли когда-нибудь смысл отключать FEATURE_ACTIVITY_TRANSITIONS и включить FEATURE_CONTENT_TRANSITIONS? Или делает FEATURE_CONTENT_TRANSITIONS требовать FEATURE_ACTIVITY_TRANSITIONS быть включенным также?

Спасибо!

1 ответ

Решение

Я рад, что у меня есть возможность ответить на эти вопросы, так как документация не совсем ясна.

Раньше был один флаг FEATURE_CONTENT_TRANSITIONS это обрабатывало обе функции. Мы разделили их, когда приложения Материал получили неожиданное поведение, когда оно было включено. Таким образом, некоторые старые документы могут по-прежнему говорить, что вы должны включить FEATURE_CONTENT_TRANSITIONS чтобы получить переходы активности, когда они имеют в виду FEATURE_ACTIVITY_TRANSITIONS,

  1. В чем разница между этими двумя флагами? В чем разница между "переходом активности" и "переходом контента" в этом контексте?

Переход активности в этом контексте означает, что вы звоните startActivity с расслоением, созданным из ActivityOptions.makeSceneTransitionAnimation или ваша деятельность началась с этого пакета. Переходы активности изменяют ваш макет (например, затенение элементов, перемещение общих элементов), поэтому, если ваша активность не нравится, вы должны отключить FEATURE_ACTIVITY_TRANSITIONS,

Контентные переходы используют TransitionManager когда ты звонишь setContentView (кроме первого раза). Как правило, вы получите перекрестное затухание, но если в контенте вашей деятельности есть общие черты, такие как обмен идентификаторами или использование transitionName, ты получишь ChangeBounds поведение между этими взглядами. Вы можете изменить детали ваших переходов, настроив TransitionManager связан с вашим окном либо с использованием XML или кода.

  1. Почему FEATURE_ACTIVITY_TRANSITIONS включен и FEATURE_CONTENT_TRANSITIONS по умолчанию отключен? Когда это позволяет FEATURE_CONTENT_TRANSITIONS флаг на самом деле требуется?

FEATURE_CONTENT_TRANSITIONS использует TransitionManager, когда ваш контент меняется. По умолчанию это кроссфейд, и это было очень плохо для некоторых приложений. С другой стороны, FEATURE_ACTIVITY_TRANSITIONS по умолчанию ничего не делает для большинства приложений. Вы должны выбрать запуск действия таким образом, чтобы его было безопасно включить.

  1. Будет ли когда-нибудь смысл отключать FEATURE_ACTIVITY_TRANSITIONS и включить FEATURE_CONTENT_TRANSITIONS? Или делает FEATURE_CONTENT_TRANSITIONS требовать FEATURE_ACTIVITY_TRANSITIONS быть включенным также?

Да, но вряд ли. Если ваше приложение нравится FEATURE_CONTENT_TRANSITIONSдолжно хорошо работать с FEATURE_ACTIVITY_TRANSITIONS, Если вы хотите явно ограничить людей от вызова вашей деятельности с общими элементами или вам не нравится стандартный эффект ввода перехода, вы можете отключить его, чтобы предотвратить эффект, когда другие приложения вызывают ваши.

Другие вопросы по тегам