FEATURE_ACTIVITY_TRANSITIONS与FEATURE_CONTENT_TRANSITIONS

Ale*_*ood 43 android activity-transition shared-element-transition

我在理解这两个Window标志之间的区别时遇到了一些麻烦,并且在每个标志需要使用时都不是100%肯定的.

文档Window.FEATURE_ACTIVITY_TRANSITIONS说:

允许活动通过发送或接收使用makeSceneTransitionAnimation(Activity, Pair[]) 或创建的ActivityOptions包来运行活动转换 makeSceneTransitionAnimation(Activity, View, String).

而文档Window.FEATURE_CONTENT_TRANSITIONS说:

用于请求窗口内容更改的标志应使用a进行动画处理TransitionManager.

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.然而,令我困惑的是,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启用?

谢谢!

Geo*_*unt 44

我很高兴我有机会回答这些问题,因为文件不太清楚.

早期,有一个标志FEATURE_CONTENT_TRANSITIONS处理这两个功能.当Material应用程序在启用时出现意外行为时,我们将它们拆分.因此,一些较旧的文档可能仍然表示您必须启用FEATURE_CONTENT_TRANSITIONS它们意味着进行活动转换FEATURE_ACTIVITY_TRANSITIONS.

  1. 这两面旗帜有什么区别?在这种情况下,"活动过渡"和"内容过渡"之间有什么区别?

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

内容转换使用TransitionManager您拨打时setContentView(第一次除外).通常,您将获得交叉淡入淡出,但如果您的Activity的内容有共同点,例如共享ID或使用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.如果您希望明确限制人们使用共享元素调用您的活动,或者您不喜欢标准输入过渡效果,则可以禁用它以防止其他应用程序调用您的活动时产生效果.

  • 是.FEATURE_ACTIVITY_TRANSITIONS是必需的,但FEATURE_CONTENT_TRANSITIONS不是. (5认同)
  • 感谢所有这些信息!所以只是为了澄清,听起来这个文档不正确,说明为了使用自定义活动转换需要启用`FEATURE_CONTENT_TRANSITIONS`?只是想确保...... (2认同)
  • 要启动具有活动转换的活动,必须使用ActivityOptions.makeSceneTransitionAnimation(...)并将包传递给startActivity调用.如果某人没有使用该活动调用活动,您将不会获得任何特殊的动画行为. (2认同)