2018-05-14—属性动画(2)ValueAnimator初
嗨大家好,记得我们以前讲过属性动画的一个类,叫做ObjectAnimator。其实属性动画还有另外一个类——ValueAnimator类。今天我们来看一下它的使用:
ValueAnimator介绍
ValueAnimator类是属性动画中最核心的一个类,其实如果有细心的朋友,在之前使用ObjectAnimator的时候就已经发现ObjectAnimator是继承自ValueAnimator的了,也就是说我们ObjectAnimator的底层执行还是靠我们ValueAnimator的。
关于ObjectAnimator大家可以看一下我之前写的:属性动画ObjectAnimator类使用
而且ValueAnimator完全不受对象的限制:可以这么理解,我们有个初始值和结束值,我们只是将这个属性值从初始值到结束值通过一种循环机制,实现一种值的动画过度,而在这段过程中它的值是不断改变的,我们通过获取到这个不断变化的属性值,来给不同的对象进行操作,达到属性变换,从而达到动画的效果。
是不是有点懵逼,接下来我们看一下他的获取方法就很清楚了。
java方式:

和ObjectAnimator一样,也是通过某种静态方法获取到的实例。而不同的是这里面我们只把数值传进去,而ObjectAnimator是连同对象和他的属性也一同传进去了(这个在等会儿会给大家详细解释)。后两个方法我们暂时不要管,等以后再说。
我们先创建一个ValueAnimator对象吧:

现在我们有了一个ValueAnimator对象了,接下来我们看一下它有哪些常用的方法:

最常用的就是这几个了,相信备注写的清清楚楚。
有一点要说一下:cancel和end,cancel调用后,是保留到当前的属性值。而end调用后,是保留我们参数中填入的最后值。
我们说ValueAnimator会时刻监听属性值的变化,没错,ValueAnimator有自己的监听器。

ValueAnimator一共有三种监听器,如上所示:
第一个AnimatorUpdateListener这个监听器是必须添加的,因为我们获取不断变化的属性值是通过它里面的onAnimatorUpdate方法获取的。而且如果不设置这个监听器,我们无法添加动画效果。
剩下两个监听器大家自己下去试一下就好。

我之前添加了一个ImageView控件,我让获取到的属性值添加到img的rotation属性中(这个属性什么意思不知道的话一头战死吧。。。。),然后调用start方法。(我改成了按键调用)

我想现在大家知道我之前说的不被对象束缚是什么意思了,我们只是通过获取不断变化的属性值,然后在回调接口中实现我们想要的逻辑。同时也可以看出属性动画是真的改变属性。而不同于View动画。
接下来我们看一下XML实现:
1.在res目录下创建animator文件目录。
2.animator中创建xml文件。

xml的标签看的应该很明白,不用多做解释了吧。
然后调用和ObjectAnimator一样:

然后通过我们添加其他方法去完善,最后start就可以了。
关于ValueAnimator的基本用法就是这些了。在下一章我们将进一步理解属性动画,以及学习更加高级的用法。