自定义View之动画篇(十)-属性动画之—AniamtorSet(组合动画)

属性动画之—组合动画(AnimatorSet)

前面我们说过借助PropertyValuesHolder,也可以实现多个动画同时作用于同一控件,AnimatorSet为官方给出的组合实现。
首先明确的一点是,组合动画对ValueAniamtor和ObjectAnimator都适用,但是一般ObjectAniamtor组合动画最常用。直接给为我们提供了两个方法playSequentially和playTogether,playSequentially表示所有动画依次播放,playTogether表示所有动画一起开始。

AnimatorSet.Builder

比如我们有三个动画,需要先播放动画C,在同播放动画A、B,这playsequentially()和playTogether()就无法实现了。就需要借助AnimatorSet.Builder类实现了

生成Animator.Builder对象实例,是通果animatorSet.play(animtor)方法生成对象的,表示要播放那个动画。

再来看看Animator.Builder类其方法

	
	//和前面动画一起执行
	public Builder with(Animator anim)

	//执行先执行这个动画,再执行前面动画
	public Builder before(Animator anim)

	
	//执行前面的动画后,才执行该动画	
	public Builder after(Animator anim)

	//延迟n毫秒之后执行动画
	public Builder after(long delay)


play()表示当前动画,before()、after()、with()都是以play()当前播放的那个动画为基准的
比如play(animA),表示当前正在播放animA,before(animB),表示在animA在animB前面播放,with(animC)表示animaA和animC同时播放,after(animD)表示animA在animD之后播放。因此播放顺序为:D——>A、C——>B

AnimatorSet监听器


	public static interface AnimatorListener {
	    /**
	     * 当AnimatorSet开始时调用
	     */
	    void onAnimationStart(Animator animation);
	
	    /**
	     * 当AnimatorSet结束时调用
	     */
	    void onAnimationEnd(Animator animation);
	
	    /**
	     * 当AnimatorSet被取消时调用
	     */
	    void onAnimationCancel(Animator animation);
	
	    /**
	     * 当AnimatorSet重复时调用,由于AnimatorSet没有设置repeat的函数,所以这个方法永远不会被调用
	     */
	    void onAnimationRepeat(Animator animation);
	}


这儿需要说明一点是,监听器监听的而是AniamtorSet本身的动作,而不是其内部每个动画的动作。只有当AnimatorSet状态飞改变时,才会被调用

最后在来看看AniamtorSet类中的其他几个方法


	//设置单次动画时长
	public AnimatorSet setDuration(long duration);
	//设置加速器
	public void setInterpolator(TimeInterpolator interpolator)
	//设置ObjectAnimator动画目标控件,如果设置了,会覆盖单个动画中的目标控件
	public void setTarget(Object target)


可能你会有这种疑问,AnimatorSet和其内部的动画设置插值器等有什么区别?

区别就是:在AnimatorSet中设置以后,会覆盖单个ObjectAnimator中的设置;即如果AnimatorSet中没有设置,那么就以ObjectAnimator中的设置为准。如果AnimatorSet中设置以后,ObjectAnimator中的设置就会无效。
比如内部每个单个动画设置了时长、插值器,而animatorSet也设置了时长没有设置插值器,animatorSet设置的时长会覆盖内部每个动画的时长,其时长全部变成animatorSet设置的时长,而内部动画还是按自己的插值器效果实现自己的动画。一旦animatorSet也设置了插值器,南无内部每个动画设置插值器就会无效,每个动画的插值器就变成了animatorSet设置的插值器了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值