public class LayoutTransition
extends Object
java.lang.Object | |
↳ | android.animation.LayoutTransition |
该类在ViewGroup对象的布局更改中启用自动动画。 要为布局容器启用转换,请创建一个LayoutTransition对象,并通过调用setLayoutTransition(LayoutTransition)
将其设置在任何ViewGroup上。 这会导致默认动画在物品添加到该容器或从该容器移除时运行。 要指定自定义动画,请使用setAnimator()
方法。
这些转换动画的核心概念之一是,导致转换的变化有两种类型,由于这些变化,有四种不同的动画会运行。 触发转换的更改是将项目添加到容器(称为“出现”转换)或从容器中删除(也称为“消失”)。 设置视图的可见性(在GONE和VISIBLE之间)将触发相同的添加/删除逻辑。 由于这些事件而运行的动画是动画添加项目的动画,动画将被删除项目的动画,以及动画处理由于添加/删除发生而改变的容器中的其他项目的动画。 过渡的用户可能需要不同的动画来更改项目,具体取决于他们是否因出现或消失的事件而发生变化,所以对于这些变化事件的每个变体都有一个动画。 这个类的大部分API都关心如何设置这四种情况下使用的动画的基本属性,或者为这四种情况中的任何一种或全部设置定制动画。
默认情况下,DISAPPEARING动画立即开始,与CHANGE_APPEARING动画一样。 其他动画在延迟设置为默认的动画持续时间后开始。 这种行为促进了转换中的一系列动画,如下所示:当项目被添加到布局时,该容器的其他子项将首先移动(从而为新项目创建空间),然后显示的动画将运行以动画项目被添加。 相反,当一个项目从一个容器中移除时,要移除它的动画将首先运行,然后布局中其他子项的动画将运行(关闭在项目被移除时在布局中创建的间隙)。 如果不需要此默认编排行为,则可以根据需要更改任何或所有动画的setDuration(int, long)
和setStartDelay(int, long)
。
为转换指定的动画(默认和在转换对象上设置的任何自定义动画)仅为模板。 也就是说,这些动画存在的基本动画属性,如持续时间,启动延迟和属性被动画。 但是实际的目标对象以及这些属性的开始和结束值在每次运行时设置转换的过程中会自动设置。 每个动画都是从原始副本克隆的,然后使用动画的目标的动态值(例如布局容器中作为布局事件结果移动的项目之一)填充克隆,以及正在改变的值(例如该对象的位置和大小)。 推送到每个动画的实际值取决于为动画指定的属性。 例如,默认的动画CHANGE_APPEARING动画的left
, top
, right
, bottom
, scrollX
,和scrollY
性质。 转换开始时,这些属性的值将使用布局前和布局值更新。 假设他们使用具有目标对象上已知的属性名称的ObjectAnimator对象,则自定义动画将被类似地填充为目标值和动画值。
该类和容器的关联XML标志animateLayoutChanges =“true”提供了一个简单的实用程序,用于在简单情况下自动进行更改。 由于各种布局级别的相互关系,在多层嵌套视图层次结构中使用LayoutTransition可能不起作用。 此外,正在添加或删除项目的同时滚动的容器可能不适合此实用程序,因为由LayoutTransition计算的之前/之后位置可能与动画完成时的实际位置不匹配容器在动画运行时滚动。 您可以通过将CHANGE_APPEARING和CHANGE_DISAPPEARING动画设置为null并适当设置其他动画的startDelay来禁用“更改”动画,从而解决该特定问题。
Nested classes |
|
---|---|
interface |
LayoutTransition.TransitionListener 该接口用于监听转场的开始和结束事件。 |
Constants |
|
---|---|
int |
APPEARING 一个标志,指示在容器中出现的那些项目上运行的动画。 |
int |
CHANGE_APPEARING 一个标志,表示在由于容器中出现新项目而正在更改的那些项目上运行的动画。 |
int |
CHANGE_DISAPPEARING 一个标志,表示在由于某个项目从容器中消失而正在更改的项目上运行的动画。 |
int |
CHANGING 一个标志,表示在由于布局更改而导致正在更改的项目上运行的动画,这些更改不是由向容器添加项目或从容器中移除项目引起的。 |
int |
DISAPPEARING 一个标志,指示在从容器中消失的那些项目上运行的动画。 |
Public constructors |
|
---|---|
LayoutTransition() 构造一个LayoutTransition对象。 |
Public methods |
|
---|---|
void |
addChild(ViewGroup parent, View child) 当子视图即将添加到容器时,ViewGroup将调用此方法。 |
void |
addTransitionListener(LayoutTransition.TransitionListener listener) 添加一个监听器,当由于布局处理而导致视图边界发生更改时将会调用该监听器。 |
void |
disableTransitionType(int transitionType) 为此LayoutTransition对象禁用指定的transitionType。 |
void |
enableTransitionType(int transitionType) 为此LayoutTransition对象启用指定的transitionType。 |
Animator |
getAnimator(int transitionType) 获取可能运行的其中一种转换类型期间使用的动画。 |
long |
getDuration(int transitionType) 获取此转换使用的其中一个动画对象的持续时间。 |
TimeInterpolator |
getInterpolator(int transitionType) 获取此转换使用的其中一个动画对象上的插补器。 |
long |
getStagger(int transitionType) 获取在其中一个更改动画期间开始每个动画之间的延迟时间。 |
long |
getStartDelay(int transitionType) 获取此转换使用的其中一个动画对象的开始延迟。 |
List<LayoutTransition.TransitionListener> |
getTransitionListeners() 获取布局更改的侦听器的当前列表。 |
void |
hideChild(ViewGroup parent, View child) 此方法在API级别16中已弃用。请使用 |
void |
hideChild(ViewGroup parent, View child, int newVisibility) 当子视图即将隐藏在容器中时,此方法由ViewGroup调用。 |
boolean |
isChangingLayout() 如果动画正在运行动画布局相关的属性,则返回true。 |
boolean |
isRunning() 如果此转换中的任何动画当前正在运行,则返回true。 |
boolean |
isTransitionTypeEnabled(int transitionType) 返回是否为此LayoutTransition对象启用指定的transitionType。 |
void |
removeChild(ViewGroup parent, View child) 当子视图即将从容器中移除时,ViewGroup将调用此方法。 |
void |
removeTransitionListener(LayoutTransition.TransitionListener listener) 删除布局更改的侦听器。 |
void |
setAnimateParentHierarchy(boolean animateParentHierarchy) 该标志控制CHANGE_APPEARING或CHANGE_DISAPPEARING动画是否会导致默认更改动画在父层次结构上运行。 |
void |
setAnimator(int transitionType, Animator animator) 设置可能运行的其中一种转换类型期间使用的动画。 |
void |
setDuration(int transitionType, long duration) 设置此转换使用的其中一个动画对象的持续时间。 |
void |
setDuration(long duration) 设置此过渡对象的所有动画使用的持续时间。 |
void |
setInterpolator(int transitionType, TimeInterpolator interpolator) 在此转换使用的其中一个动画对象上设置插补器。 |
void |
setStagger(int transitionType, long duration) 设置在其中一个更改动画期间开始每个动画之间的延迟时间。 |
void |
setStartDelay(int transitionType, long delay) 设置此转换使用的其中一个动画对象的开始延迟。 |
void |
showChild(ViewGroup parent, View child) 此方法在API级别16中已弃用。请使用 |
void |
showChild(ViewGroup parent, View child, int oldVisibility) 当子视图即将在容器中可见时,ViewGroup将调用此方法。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
int CHANGE_APPEARING
一个标志,表示在由于容器中出现新项目而正在更改的那些项目上运行的动画。
常量值:0(0x00000000)
int CHANGE_DISAPPEARING
一个标志,表示在由于某个项目从容器中消失而正在更改的项目上运行的动画。
常数值:1(0x00000001)
int CHANGING
一个标志,表示在由于布局更改而导致正在更改的项目上运行的动画,这些更改不是由向容器添加项目或从容器中移除项目引起的。 此转换类型默认情况下未启用; 它可以通过enableTransitionType(int)
启用。
常量值:4(0x00000004)
LayoutTransition ()
构造一个LayoutTransition对象。 默认情况下,该对象将侦听所设置的任何ViewGroup上的布局事件,并将为每种类型的布局事件运行默认动画。
void addChild (ViewGroup parent, View child)
当子视图即将添加到容器时,ViewGroup将调用此方法。 此回调启动转换过程; 我们抓取起始值,听取容器中所有孩子的变化,并开始适当的动画。
Parameters | |
---|---|
parent |
ViewGroup : The ViewGroup to which the View is being added. |
child |
View : The View being added to the ViewGroup. |
void addTransitionListener (LayoutTransition.TransitionListener listener)
添加一个监听器,当由于布局处理而导致视图边界发生更改时将会调用该监听器。
Parameters | |
---|---|
listener |
LayoutTransition.TransitionListener : The listener that will be called when layout bounds change. |
void disableTransitionType (int transitionType)
为此LayoutTransition对象禁用指定的transitionType。 默认情况下,启用除CHANGING
之外的所有转换类型。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING . |
void enableTransitionType (int transitionType)
为此LayoutTransition对象启用指定的transitionType。 默认情况下,LayoutTransition监听容器中添加/删除/隐藏/显示的子项的更改,并运行与这些事件关联的动画。 也就是说,除CHANGING
之外的所有转换类型都默认启用。 您也可以通过使用CHANGING
transitionType调用此方法来启用CHANGING
动画。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING . |
Animator getAnimator (int transitionType)
获取可能运行的其中一种转换类型期间使用的动画。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING , which determines the animation whose animator is being returned. |
Returns | |
---|---|
Animator |
Animator The animation being used for the given transition type. |
也可以看看:
long getDuration (int transitionType)
获取此转换使用的其中一个动画对象的持续时间。 transitionType
参数确定返回持续时间的动画。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING , which determines the animation whose duration is returned. |
Returns | |
---|---|
long |
long The duration of the specified animation. |
也可以看看:
TimeInterpolator getInterpolator (int transitionType)
获取此转换使用的其中一个动画对象上的插补器。 transitionType
参数确定插值器返回的动画。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING , which determines the animation whose interpolator is being returned. |
Returns | |
---|---|
TimeInterpolator |
TimeInterpolator The interpolator that the specified animation uses. |
long getStagger (int transitionType)
获取在其中一个更改动画期间开始每个动画之间的延迟时间。
Parameters | |
---|---|
transitionType |
int : A value of CHANGE_APPEARING , CHANGE_DISAPPEARING , or CHANGING . |
Returns | |
---|---|
long |
long The length of time, in milliseconds, to delay before launching the next animation in the sequence. |
long getStartDelay (int transitionType)
获取此转换使用的其中一个动画对象的开始延迟。 transitionType
参数确定返回启动延迟的动画。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING , which determines the animation whose start delay is returned. |
Returns | |
---|---|
long |
long The start delay of the specified animation. |
也可以看看:
List<LayoutTransition.TransitionListener> getTransitionListeners ()
获取布局更改的侦听器的当前列表。
Returns | |
---|---|
List<LayoutTransition.TransitionListener> |
void hideChild (ViewGroup parent, View child)
此方法在API级别16中已被弃用。
使用hideChild(android.view.ViewGroup, android.view.View, int)
。
Parameters | |
---|---|
parent |
ViewGroup
|
child |
View
|
void hideChild (ViewGroup parent, View child, int newVisibility)
当子视图即将隐藏在容器中时,此方法由ViewGroup调用。 此回调启动转换过程; 我们抓取起始值,听取容器中所有孩子的变化,并开始适当的动画。
Parameters | |
---|---|
parent |
ViewGroup : The parent ViewGroup of the View being hidden. |
child |
View : The View being hidden. |
newVisibility |
int : The new visibility value of the child View, either GONE or INVISIBLE . |
boolean isChangingLayout ()
如果动画正在运行动画布局相关的属性,则返回true。 这基本上意味着CHANGE_APPEARING或CHANGE_DISAPPEARING动画正在运行,因为这些动画对布局相关的属性进行操作。
Returns | |
---|---|
boolean |
true if CHANGE_APPEARING or CHANGE_DISAPPEARING animations are currently running. |
boolean isRunning ()
如果此转换中的任何动画当前正在运行,则返回true。
Returns | |
---|---|
boolean |
true if any animations in the transition are running. |
boolean isTransitionTypeEnabled (int transitionType)
返回是否为此LayoutTransition对象启用指定的transitionType。 默认情况下,启用除CHANGING
之外的所有转换类型。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING . |
Returns | |
---|---|
boolean |
true if the specified transitionType is currently enabled, false otherwise. |
void removeChild (ViewGroup parent, View child)
当子视图即将从容器中移除时,ViewGroup将调用此方法。 此回调启动转换过程; 我们抓取起始值,听取容器中所有孩子的变化,并开始适当的动画。
Parameters | |
---|---|
parent |
ViewGroup : The ViewGroup from which the View is being removed. |
child |
View : The View being removed from the ViewGroup. |
void removeTransitionListener (LayoutTransition.TransitionListener listener)
删除布局更改的侦听器。
Parameters | |
---|---|
listener |
LayoutTransition.TransitionListener : The listener for layout bounds change. |
void setAnimateParentHierarchy (boolean animateParentHierarchy)
该标志控制CHANGE_APPEARING或CHANGE_DISAPPEARING动画是否会导致默认更改动画在父层次结构上运行。 这允许转换视图的容器也转换,这在容器边界在前/后状态之间改变并且可能在转换动画期间剪切他们的子项的情况下可能是必需的。 例如,具有wrap_content的布局将根据其子级的尺寸调整其边界。
默认的改变转换为目标视图的边界和滚动位置设置动画。 这些是将在父层次结构上运行的动画,而不是在转换时恰好设置的自定义动画。 这允许为过渡容器的孩子定制行为,但是对任何变化的父母使用调整大小/重新调整标准行为。
Parameters | |
---|---|
animateParentHierarchy |
boolean : A boolean value indicating whether the parents of transitioning views should also be animated during the transition. Default value is true. |
void setAnimator (int transitionType, Animator animator)
设置可能运行的其中一种转换类型期间使用的动画。 任何Animator对象都可以使用,但在布局转换的上下文中最有用,动画应该是ObjectAnimator或包含PropertyAnimators的动画AnimatorSet。 而且,这些ObjectAnimator对象应该能够自动获取和设置目标对象的值。 例如,动画属性为“左”的left
可以设置并获取由布局转换动画的视图对象的属性left
。 该转换通过动态设置目标对象和属性,根据这些对象的pre-layoout值进行设置,因此具有可以适当处理这些属性的动画对于自定义动画效果最佳。 值的动态设置仅适用于CHANGE动画; 出现和消失的动画只是用它们的值运行。
还值得注意的是,任何和所有动画(及其基础PropertyValuesHolder对象)将根据布局前和布局值设置其开始和结束值。 因此,例如,在动画开始时,作为CHANGE_APPEARING动画的“alpha”自定义动画将继承目标对象上的alpha实际值(假定为1)作为其开始和结束值。 需要在开始和结束时使用可能与转换开始时查询的值不匹配的动画需要使用与标准ObjectAnimator对象不同的机制。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING , which determines the animation whose animator is being set. |
animator |
Animator : The animation being assigned. A value of null means that no animation will be run for the specified transitionType. |
void setDuration (int transitionType, long duration)
设置此转换使用的其中一个动画对象的持续时间。 transitionType
参数确定持续时间设置的动画。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING , which determines the animation whose duration is being set. |
duration |
long : The length of time, in milliseconds, that the specified animation should run. |
也可以看看:
void setDuration (long duration)
设置此过渡对象的所有动画使用的持续时间。 如果要特别设置其中一个动画的持续时间,请使用setDuration(int, long)
方法。
Parameters | |
---|---|
duration |
long : The length of time, in milliseconds, that the transition animations should last. |
void setInterpolator (int transitionType, TimeInterpolator interpolator)
在此转换使用的其中一个动画对象上设置插补器。 transitionType
参数确定正在设置插值器的动画。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING , which determines the animation whose interpolator is being set. |
interpolator |
TimeInterpolator : The interpolator that the specified animation should use. |
void setStagger (int transitionType, long duration)
设置在其中一个更改动画期间开始每个动画之间的延迟时间。
Parameters | |
---|---|
transitionType |
int : A value of CHANGE_APPEARING , CHANGE_DISAPPEARING , or CHANGING . |
duration |
long : The length of time, in milliseconds, to delay before launching the next animation in the sequence. |
void setStartDelay (int transitionType, long delay)
设置此转换使用的其中一个动画对象的开始延迟。 transitionType
参数确定启动延迟正在设置的动画。
Parameters | |
---|---|
transitionType |
int : One of CHANGE_APPEARING , CHANGE_DISAPPEARING , CHANGING , APPEARING , or DISAPPEARING , which determines the animation whose start delay is being set. |
delay |
long : The length of time, in milliseconds, to delay before starting the animation. |
也可以看看:
void showChild (ViewGroup parent, View child)
此方法在API级别16中已被弃用。
使用showChild(android.view.ViewGroup, android.view.View, int)
。
Parameters | |
---|---|
parent |
ViewGroup
|
child |
View
|
void showChild (ViewGroup parent, View child, int oldVisibility)
当子视图即将在容器中可见时,ViewGroup将调用此方法。 此回调启动转换过程; 我们抓取起始值,听取容器中所有孩子的变化,并开始适当的动画。
Parameters | |
---|---|
parent |
ViewGroup : The ViewGroup in which the View is being made visible. |
child |
View : The View being made visible. |
oldVisibility |
int : The previous visibility value of the child View, either GONE or INVISIBLE . |