Android API 25(Andrid 7.1.1)
AnimatorSet
public final class AnimatorSet
extends Animator
Added in API level 11
java.lang.Object
↳ android.animation.Animator
↳ android.animation.AnimatorSet
【概述】
这个类按指定的顺序播放一组Animator对象。动画可以设置为一起播放,按顺序播放,或在指定的延迟后播放。
向AnimatorSet添加动画有两种不同的方法:可以调用playTogether()或playSequentially()方法一次添加一组动画,或者play(Animator)可以与Builder类一个一个添加动画。
可以在其动画之间设置具有循环依赖性的AnimatorSet。例如,动画a1可以被设置为在动画a2之前开始,在a3之前的a2,以及在a1之前的a3。此配置的结果未定义,但通常不会导致播放受影响的动画。由于这一点(并且因为循环依赖性不会使逻辑意义),应当避免循环依赖性,并且动画的依赖性流程应该只在一个方向。
开发人员指南
有关使用AnimatorSet动画制作的更多信息,请阅读属性动画开发人员指南。
【内部类】
类 AnimatorSet.Builder
Builder对象是一个实用程序类,用于方便向AnimatorSet添加动画以及各种动画之间的关系。
【公共构造函数】
AnimatorSer()
【公共方法】
getDuration
long getDuration ()
API 11
获取此AnimatorSet的每个子动画的长度。 该值可以小于0,这指示在该AnimatorSet上没有设置持续时间,并且每个子动画将使用它们自己的持续时间。
setDuration
Animator setDuration (long duration)
API 11
设置动画的持续时间。
设置此AnimatorSet的每个当前子动画的长度。 默认情况下,每个子动画将使用自己的持续时间。 如果在AnimatorSet上设置持续时间,则每个子动画都会继承此持续时间。
getTotalDuration
long getTotalDuration ()
API 24
获取动画的总持续时间,考虑动画序列,开始延迟和重复。 如果持续时间为无限,则返回DURATION_INFINITE。
getInterpolator
TimeInterpolator getInterpolator ()
API 18
返回此动画使用的时间插值器。
setInterpolator
void setInterpolator (TimeInterpolator value)
API 11
为此AnimatorSet的所有当前子动画设置TimeInterpolator。 默认值为null,这意味着在此AnimatorSet上没有设置插值器。 将内插器设置为任何非空值将导致在集合启动时在子动画上设置内插器。
getStartDelay
long getStartDelay ()
API 11
调用start()之后延迟处理动画的时间(以毫秒为单位)。
setStartDelay
void setStartDelay (long startDelay)
API 11
调用start()之后延迟启动动画的时间(以毫秒为单位)。
注意,启动延迟应始终为非负。 任何负启动延迟将在N及以上版本时强制为0。
isStarted
boolean isStarted ()
API 14
返回此Animator是否已启动且尚未结束。
对于可重复使用的Animator(除了通过createCircularReveal()生成的一次性Animator之外,大多数Animator,这个状态是isRunning()的超集,因为具有非零startDelay的Animator在延迟期间将返回isStarted 相位,而isRunning()将只有在延迟阶段完成后才会返回true。 不可重复使用的动画器在启动后总是返回true,因为它们不能返回到非启动状态。
isRunning
boolean isRunning ()
API 11
如果此AnimatorSet的任何子动画已启动且尚未结束,则返回true。 直到AnimatorSet通过setStartDelay(long)超过其初始延迟集才启动子动画。
isPaused
boolean isPaused ()
API 19
返回此Animator当前是否处于暂停状态。
start
void start ()
API 11
开始本动画。 如果动画具有非零的startDelay,则动画将在延迟结束后开始运行。 非延迟动画将立即设置其初始值,然后调用onAnimationStart(Animator)用于此Animator的任何监听器。
通过调用此方法开始的动画将在调用此方法的线程上运行。 这个线程应该有一个Looper(如果不是这种情况,会抛出一个运行时异常)。 此外,如果动画将对视图层次结构中对象的属性进行动画处理,则调用线程应该是该视图层次结构的UI线程。
pause
void pause ()
API 19
暂停正在运行的动画。 此方法应该只在动画开始的同一个线程上调用。 如果动画尚未开始或者已经结束,则忽略该调用。 暂停的动画可以通过调用resume()恢复。
resume
void resume ()
API 19
恢复已暂停的动画,使 animator在暂停时从中断的位置继续。 此方法应该只在动画开始的同一个线程上调用。 对当前未暂停的animator的resume()调用将被忽略。
cancel
void cancel ()
API 11
取消动画。 与end()不同,cancel()使动画在其轨道中停止,向其侦听器发送onAnimationCancel(Animator),然后是
onAnimationEnd(Animator)消息。
必须在运行动画的线程上调用此方法。
注意,取消AnimatorSet也会取消它所负责的所有动画。
end
void end ()
API 11
结束动画。 这将导致动画分配正在动画属性的结束值,然后在其侦听器上调用onAnimationEnd(Animator)方法。
必须在运行动画的线程上调用此方法。
注意,结束AnimatorSet也会结束它所负责的所有动画。
clone
Animator clone ()
API 11
创建并返回此对象的副本。
“复制”的精确含义可以取决于对象的类。 一般的意图是,对于任何对象x,表达式:
x.clone() != x
将是真实的,并且表达式:
x.clone().getClass() == x.getClass()
将是真的,但这些不是绝对的要求。 虽然通常的情况是:
x.clone().equals(x)
将是真的,这不是绝对的要求。
按照惯例,返回的对象应该通过调用super.clone获得。 如果一个类及其所有的超类(除了Object)遵循这个约定,将会是 x.clone().getClass() == x.getClass().
按照惯例,此方法返回的对象应该独立于此对象(正在克隆)。为了实现这种独立性,可能需要在返回super.clone之前修改该对象的一个或多个字段。通常,这意味着复制包含正在克隆的对象的内部“深层结构”的任何可变对象,并使用对副本的引用替换对这些对象的引用。如果类只包含基本字段或对不可变对象的引用,则通常情况下,super.clone返回的对象中没有字段需要修改。
类Object的方法克隆执行特定的克隆操作。首先,如果此对象的类未实现接口Cloneable,则会抛出CloneNotSupportedException。注意,所有数组都被认为实现了Cloneable接口,并且数组类型T []的clone方法的返回类型是T [],其中T是任何引用或原始类型。否则,此方法将创建此对象的类的一个新实例,并使用此对象的相应字段的内容(如通过赋值)完全初始化其所有字段;字段的内容本身不被克隆。因此,该方法执行该对象的“浅拷贝”,而不是“深拷贝”操作。
类Object本身不实现接口Cloneable,因此在类为Object的对象上调用clone方法将导致在运行时抛出异常。
setTarget
void setTarget (Object target)
API 11
设置其属性将由此动画进行动画处理的目标对象。 不是所有的子类都对目标对象进行操作(例如,ValueAnimator,但是这个方法在超类上,为的是方便地处理那些处理目标的子类。
注意:目标作为弱引用存储在内部,以避免由于动画师直接引用旧目标而导致的资源泄露。 因此,您应该确保animator目标总是在其他地方有一个硬引用。
setupEndValues
void setupEndValues ()
API 11
此方法告诉对象使用适当的信息来提取动画的结束值。 例如,
AnimatorSet对象将该调用传递给它的子对象,以告诉他们设置值。
ObjectAnimator对象将使用其有关其目标对象和PropertyValuesHolder对象的信息来获取其属性的结束值。
ValueAnimator对象将忽略该请求,因为它没有足够的信息(例如目标对象)来收集这些值。
setupStartValues
void setupStartValues ()
API 11
此方法告诉对象使用适当的信息来提取动画的起始值。 例如,
AnimatorSet对象将该调用传递给它的子对象,以告诉他们设置值。
ObjectAnimator对象将使用其有关其目标对象和PropertyValuesHolder对象的信息来获取其属性的起始值。
ValueAnimator对象将忽略该请求,因为它没有足够的信息(例如目标对象)来收集这些值。
getChildAnimations
ArrayList<Animator> getChildAnimations ()
API 11
返回此AnimatorSet控制的子Animator对象的当前列表。 这是内部列表的副本; 对返回的列表的修改不会影响AnimatorSet,但是对底层Animator对象的更改将影响由AnimatorSet管理的那些对象。
play
AnimatorSet.Builder play (Animator anim)
API 11
此方法创建一个Builder对象,用于设置播放约束。 这个初始play()方法告诉Builder这个动画是后续命令对Builder的依赖。 例如,调用play(a1).with(a2)设置AnimatorSet同时播放a1和a2,play(a1).before(a2)设置AnimatorSet先播放a1,接着a2,play(a1).after(a2) 设置AnimatorSet先播放a2,然后a1。
注意,play()是告诉Builder生成依赖关系的动画的唯一方法,所以对Builder中的各种函数的连续调用都将引用play()中提供的初始参数作为其他动画的依赖 。 例如,当a1结束时,调用play(a1).before(a2).before(a3)将同时播放a2和a3; 它不设置a2和a3之间的依赖关系。
playSequentially
void playSequentially (List<Animator> items)
void playSequentially (Animator... items)
API 11
设置此AnimatorSet以在上一个动画结束时播放每个提供的动画。
playTogether
void playTogether (Collection<Animator> items)
void playTogether (Animator... items)
API 11
设置此AnimatorSet以同时播放所有提供的动画。
这等效于用集合中的第一动画制作者调用play(Animator),然后用每个其他动画制作者调用with(Animator)。 注意,具有startDelay的Animator实际上不会启动,直到该延迟过去,这意味着如果提供给此构造函数的列表中的第一个动画制作者具有startDelay,则在第一个动画制作者的startDelay过去之前,其他动画制作者都不会开始。
toString
String toString ()
API 11
返回对象的字符串表示形式。 一般来说,toString方法返回一个“文本表示”此对象的字符串。 结果应该是一个简单但翔实的表示,是一个人很容易阅读。 建议所有子类覆盖此方法。
类Object的toString方法返回一个字符串,其中包含对象是实例的类的名称,符号字符“@”以及对象的哈希码的无符号十六进制表示。 换句话说,此方法返回一个等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())