一、前言
无法设置动画执行顺序。
整个ViewPropertyAnimator的功能都是建立在View类新增的animate()方法之上的,这个方法会创建并返回一个ViewPropertyAnimator的实例,之后的调用的所有方法,设置的所有属性都是通过这个实例完成的。
大家注意到,在使用ViewPropertyAnimator时,我们自始至终没有调用过start()方法,这是因为新的接口中使用了隐式启动动画的功能,只要我们将动画定义完成之后,动画就会自动启动。并且这个机制对于组合动画也同样有效,只要我们不断地连缀新的方法,那么动画就不会立刻执行,等到所有在ViewPropertyAnimator上设置的方法都执行完毕后,动画就会自动启动。当然如果不想使用这一默认机制的话,我们也可以显式地调用start()方法来启动动画。
ViewPropertyAnimator的所有接口都是使用连缀的语法来设计的,每个方法的返回值都是它自身的实例,因此调用完一个方法之后可以直接连缀调用它的另一个方法,这样把所有的功能都串接起来,我们甚至可以仅通过一行代码就完成任意复杂度的动画功能。
二、实现
1、 只会执行一次
//只执行一次
iv_header.setOnClickListener {
iv_header.animate().translationX(500f).rotation(180f)
.setDuration(1000).start()
}
或者使用ViewCompat实现:
ViewCompat.animate(iv_header)
.translationX(500f).rotation(180f).setDuration(1000)
2、 会多次执行
//每次点击会再次执行
iv_header2.setOnClickListener {
iv_header2.animate().translationXBy(500f).rotationBy(180f).setDuration(1000).start()
}
三、封装库相关