FEATURE_ACTIVITY_TRANSITIONS与FEATURE_CONTENT_TRANSITIONS

我有一些麻烦了解这两个Window标志之间的差异,并不是100%确定何时每个需要使用和为什么。

Window.FEATURE_ACTIVITY_TRANSITIONS的文档说:

使Activity能够通过发送或接收使用makeSceneTransitionAnimation(Activity, Pair[])makeSceneTransitionAnimation(Activity, View, String)创build的ActivityOptions包来运行活动转换。

Window.FEATURE_CONTENT_TRANSITIONS的文档说:

用于请求窗口内容更改的标志应该使用TransitionManager进行animation处理。

TransitionManager是使用setTransitionManager(TransitionManager) 。 如果没有设置,将使用默认的TransitionManager

该文档指出,以下Window方法需要启用FEATURE_ACTIVITY_TRANSITIONS标志,但不要说FEATURE_CONTENT_TRANSITIONS是否也需要启用(请注意,根据源代码 , FEATURE_ACTIVITY_TRANSITIONStrueFEATURE_CONTENT_TRANSITIONSfalse ,主题应用程序默认):

  • 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是应用程序需要启用以使用Lollipop的新的活动转换API的function标志。 然而,我感到困惑的是,Android Developers网站的这篇文章指出,为了实现自定义活动转换,需要启用FEATURE_CONTENT_TRANSITIONS

所以这是我的问题:

  1. 这两个标志有什么区别? 在这种情况下,“活动转型”和“内容转型”之间有什么区别?
  2. 为什么FEATURE_ACTIVITY_TRANSITIONS启用并且FEATURE_CONTENT_TRANSITIONS被默认禁用? FEATURE_CONTENT_TRANSITIONS实际需要的FEATURE_CONTENT_TRANSITIONS标志?
  3. 感觉禁用FEATURE_ACTIVITY_TRANSITIONS并启用FEATURE_CONTENT_TRANSITIONS是否合理? 或者FEATURE_CONTENT_TRANSITIONS需要启用FEATURE_ACTIVITY_TRANSITIONS

谢谢!

我很高兴有机会回答这些问题,因为文档不够清晰。

早些时候,有一个标志FEATURE_CONTENT_TRANSITIONS处理这两个function。 当Material应用程序在启用时出现意外的行为时,我们将它们分开。 所以一些较老的文档可能仍然会说,当FEATURE_ACTIVITY_TRANSITIONS意味着FEATURE_ACTIVITY_TRANSITIONS时,您必须启用FEATURE_CONTENT_TRANSITIONS才能获得活动转换。

  1. 这两个标志有什么区别? 在这种情况下,“活动转型”和“内容转型”之间有什么区别?

此上下文中的活动转换意味着您使用从ActivityOptions.makeSceneTransitionAnimation创build的包调用startActivity ,或者,您的活动是从该包开始的。 活动转换修改您的布局(例如淡入的元素,移动共享元素),所以如果你的活动不喜欢,你应该禁用FEATURE_ACTIVITY_TRANSITIONS

当您调用setContentView (第一次除外)时,内容转换将使用TransitionManager 。 通常情况下,您将获得交叉淡入淡出效果,但是如果您的“活动”内容具有共同的内容(如共享ID或使用transitionName ,则会在这些视图之间获得ChangeBounds行为。 您可以通过使用XML或代码自定义与Window关联的TransitionManager来更改转换的详细信息。

  1. 为什么FEATURE_ACTIVITY_TRANSITIONS启用并且FEATURE_CONTENT_TRANSITIONS被默认禁用? FEATURE_CONTENT_TRANSITIONS实际需要的FEATURE_CONTENT_TRANSITIONS标志?

当内容改变时, FEATURE_CONTENT_TRANSITIONS使用TransitionManager。 默认情况下,这是一个交叉淡入淡出,这对于某些应用程序来说是非常糟糕的。 另一方面, FEATURE_ACTIVITY_TRANSITIONS默认对大多数应用程序没有任何作用。 你必须select以这种方式开始一个活动,所以打开是安全的。

  1. 感觉禁用FEATURE_ACTIVITY_TRANSITIONS并启用FEATURE_CONTENT_TRANSITIONS是否合理? 或者FEATURE_CONTENT_TRANSITIONS需要启用FEATURE_ACTIVITY_TRANSITIONS

是的,但不太可能。 如果您的应用程序喜欢FEATURE_CONTENT_TRANSITIONS ,则应该使用FEATURE_ACTIVITY_TRANSITIONS 。 如果您想显式地限制用户使用共享元素调用您的活动,或者您不喜欢标准input转换效果,则可以禁用它以阻止其他应用程序调用您的活动时的效果。

Interesting Posts