嗨大家好,记得我们以前讲过属性动画的一个类,叫做ObjectAnimator。其实属性动画还有另外一个类——ValueAnimator类。今天我们来看一下它的使用:
ValueAnimator介绍
ValueAnimator类是属性动画中最核心的一个类,其实如果有细心的朋友,在之前使用ObjectAnimator的时候就已经发现ObjectAnimator是继承自ValueAnimator的了,也就是说我们ObjectAnimator的底层执行还是靠我们ValueAnimator的。
关于ObjectAnimator大家可以看一下我之前写的:属性动画ObjectAnimator类使用
而且ValueAnimator完全不受对象的限制:可以这么理解,我们有个初始值和结束值,我们只是将这个属性值从初始值到结束值通过一种循环机制,实现一种值的动画过度,而在这段过程中它的值是不断改变的,我们通过获取到这个不断变化的属性值,来给不同的对象进行操作,达到属性变换,从而达到动画的效果。
是不是有点懵逼,接下来我们看一下他的获取方法就很清楚了。
java方式:
![10608194-178b5b3a79a77fc7.png](https://i-blog.csdnimg.cn/blog_migrate/7cb5c93c7251065ce44162b05e6a9b06.png)
和ObjectAnimator一样,也是通过某种静态方法获取到的实例。而不同的是这里面我们只把数值传进去,而ObjectAnimator是连同对象和他的属性也一同传进去了(这个在等会儿会给大家详细解释)。后两个方法我们暂时不要管,等以后再说。
我们先创建一个ValueAnimator对象吧:
![10608194-9124aacfd8b870aa.png](https://i-blog.csdnimg.cn/blog_migrate/1e0549b6762feee868626e8e37b65e64.png)
现在我们有了一个ValueAnimator对象了,接下来我们看一下它有哪些常用的方法:
![10608194-4c64a7c295886197.png](https://i-blog.csdnimg.cn/blog_migrate/8e66ae3c1e4b35affe587846390013ab.png)
最常用的就是这几个了,相信备注写的清清楚楚。
有一点要说一下:cancel和end,cancel调用后,是保留到当前的属性值。而end调用后,是保留我们参数中填入的最后值。
我们说ValueAnimator会时刻监听属性值的变化,没错,ValueAnimator有自己的监听器。
![10608194-6e4b0a3bf54d87f4.png](https://i-blog.csdnimg.cn/blog_migrate/ef5f4889c9d7d7ce2775c608eb1b747c.png)
ValueAnimator一共有三种监听器,如上所示:
第一个AnimatorUpdateListener这个监听器是必须添加的,因为我们获取不断变化的属性值是通过它里面的onAnimatorUpdate方法获取的。而且如果不设置这个监听器,我们无法添加动画效果。
剩下两个监听器大家自己下去试一下就好。
![10608194-aa94b4088acf791c.png](https://i-blog.csdnimg.cn/blog_migrate/fb8deeda2eb72b8e5c9ecc617e4f21ff.png)
我之前添加了一个ImageView控件,我让获取到的属性值添加到img的rotation属性中(这个属性什么意思不知道的话一头战死吧。。。。),然后调用start方法。(我改成了按键调用)
![10608194-0a6aaa27fcd2eaca.gif](https://i-blog.csdnimg.cn/blog_migrate/7605f99e15898a5b8081b6c95200a836.gif)
我想现在大家知道我之前说的不被对象束缚是什么意思了,我们只是通过获取不断变化的属性值,然后在回调接口中实现我们想要的逻辑。同时也可以看出属性动画是真的改变属性。而不同于View动画。
接下来我们看一下XML实现:
1.在res目录下创建animator文件目录。
2.animator中创建xml文件。
![10608194-2030ed143e1f4c1f.png](https://i-blog.csdnimg.cn/blog_migrate/82c1f7dc62c6978557d0ebc4fa93584f.png)
xml的标签看的应该很明白,不用多做解释了吧。
然后调用和ObjectAnimator一样:
![10608194-31f579f04bbdf021.png](https://i-blog.csdnimg.cn/blog_migrate/7d14843821424cb38e12f8357e8c4c56.png)
然后通过我们添加其他方法去完善,最后start就可以了。
关于ValueAnimator的基本用法就是这些了。在下一章我们将进一步理解属性动画,以及学习更加高级的用法。