Most visited

Recently visited

Added in API level 11

LayoutTransition

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动画的lefttoprightbottomscrollX ,和scrollY性质。 转换开始时,这些属性的值将使用布局前和布局值更新。 假设他们使用具有目标对象上已知的属性名称的ObjectAnimator对象,则自定义动画将被类似地填充为目标值和动画值。

该类和容器的关联XML标志animateLayoutChanges =“true”提供了一个简单的实用程序,用于在简单情况下自动进行更改。 由于各种布局级别的相互关系,在多层嵌套视图层次结构中使用LayoutTransition可能不起作用。 此外,正在添加或删除项目的同时滚动的容器可能不适合此实用程序,因为由LayoutTransition计算的之前/之后位置可能与动画完成时的实际位置不匹配容器在动画运行时滚动。 您可以通过将CHANGE_APPEARING和CHANGE_DISAPPEARING动画设置为null并适当设置其他动画的startDelay来禁用“更改”动画,从而解决该特定问题。

Summary

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中已弃用。请使用hideChild(android.view.ViewGroup, android.view.View, int)

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中已弃用。请使用showChild(android.view.ViewGroup, android.view.View, int)

void showChild(ViewGroup parent, View child, int oldVisibility)

当子视图即将在容器中可见时,ViewGroup将调用此方法。

Inherited methods

From class java.lang.Object

Constants

APPEARING

Added in API level 11
int APPEARING

一个标志,指示在容器中出现的那些项目上运行的动画。

常量值:2(0x00000002)

CHANGE_APPEARING

Added in API level 11
int CHANGE_APPEARING

一个标志,表示在由于容器中出现新项目而正在更改的那些项目上运行的动画。

常量值:0(0x00000000)

CHANGE_DISAPPEARING

Added in API level 11
int CHANGE_DISAPPEARING

一个标志,表示在由于某个项目从容器中消失而正在更改的项目上运行的动画。

常数值:1(0x00000001)

CHANGING

Added in API level 16
int CHANGING

一个标志,表示在由于布局更改而导致正在更改的项目上运行的动画,这些更改不是由向容器添加项目或从容器中移除项目引起的。 此转换类型默认情况下未启用; 它可以通过enableTransitionType(int)启用。

常量值:4(0x00000004)

DISAPPEARING

Added in API level 11
int DISAPPEARING

一个标志,指示在从容器中消失的那些项目上运行的动画。

常量值:3(0x00000003)

Public constructors

LayoutTransition

Added in API level 11
LayoutTransition ()

构造一个LayoutTransition对象。 默认情况下,该对象将侦听所设置的任何ViewGroup上的布局事件,并将为每种类型的布局事件运行默认动画。

Public methods

addChild

Added in API level 11
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.

addTransitionListener

Added in API level 11
void addTransitionListener (LayoutTransition.TransitionListener listener)

添加一个监听器,当由于布局处理而导致视图边界发生更改时将会调用该监听器。

Parameters
listener LayoutTransition.TransitionListener: The listener that will be called when layout bounds change.

disableTransitionType

Added in API level 16
void disableTransitionType (int transitionType)

为此LayoutTransition对象禁用指定的transitionType。 默认情况下,启用除CHANGING之外的所有转换类型。

Parameters
transitionType int: One of CHANGE_APPEARING, CHANGE_DISAPPEARING, CHANGING, APPEARING, or DISAPPEARING.

enableTransitionType

Added in API level 16
void enableTransitionType (int transitionType)

为此LayoutTransition对象启用指定的transitionType。 默认情况下,LayoutTransition监听容器中添加/删除/隐藏/显示的子项的更改,并运行与这些事件关联的动画。 也就是说,除CHANGING之外的所有转换类型都默认启用。 您也可以通过使用CHANGING transitionType调用此方法来启用CHANGING动画。

Parameters
transitionType int: One of CHANGE_APPEARING, CHANGE_DISAPPEARING, CHANGING, APPEARING, or DISAPPEARING.

getAnimator

Added in API level 11
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.

也可以看看:

getDuration

Added in API level 11
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.

也可以看看:

getInterpolator

Added in API level 11
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.

也可以看看:

getStagger

Added in API level 11
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.

getStartDelay

Added in API level 11
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.

也可以看看:

getTransitionListeners

Added in API level 11
List<LayoutTransition.TransitionListener> getTransitionListeners ()

获取布局更改的侦听器的当前列表。

Returns
List<LayoutTransition.TransitionListener>

hideChild

Added in API level 11
void hideChild (ViewGroup parent, 
                View child)

此方法在API级别16中已被弃用。
使用hideChild(android.view.ViewGroup, android.view.View, int)

Parameters
parent ViewGroup
child View

hideChild

Added in API level 16
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.

isChangingLayout

Added in API level 11
boolean isChangingLayout ()

如果动画正在运行动画布局相关的属性,则返回true。 这基本上意味着CHANGE_APPEARING或CHANGE_DISAPPEARING动画正在运行,因为这些动画对布局相关的属性进行操作。

Returns
boolean true if CHANGE_APPEARING or CHANGE_DISAPPEARING animations are currently running.

isRunning

Added in API level 11
boolean isRunning ()

如果此转换中的任何动画当前正在运行,则返回true。

Returns
boolean true if any animations in the transition are running.

isTransitionTypeEnabled

Added in API level 16
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.

removeChild

Added in API level 11
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.

removeTransitionListener

Added in API level 11
void removeTransitionListener (LayoutTransition.TransitionListener listener)

删除布局更改的侦听器。

Parameters
listener LayoutTransition.TransitionListener: The listener for layout bounds change.

setAnimateParentHierarchy

Added in API level 14
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.

setAnimator

Added in API level 11
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.

setDuration

Added in API level 11
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.

也可以看看:

setDuration

Added in API level 11
void setDuration (long duration)

设置此过渡对象的所有动画使用的持续时间。 如果要特别设置其中一个动画的持续时间,请使用setDuration(int, long)方法。

Parameters
duration long: The length of time, in milliseconds, that the transition animations should last.

setInterpolator

Added in API level 11
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.

也可以看看:

setStagger

Added in API level 11
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.

setStartDelay

Added in API level 11
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.

也可以看看:

showChild

Added in API level 11
void showChild (ViewGroup parent, 
                View child)

此方法在API级别16中已被弃用。
使用showChild(android.view.ViewGroup, android.view.View, int)

Parameters
parent ViewGroup
child View

showChild

Added in API level 16
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.

Hooray!