ObjectAnimator
新来公司接手android项目,阅读源码的时候发现了这个东西,不知道是啥,自己百度学习了一下,看到一篇惊为天人的博客,所以想把它转到简书记录一下自己的学习,想更好地了解ObjectAnimator的可以去看看原文[原文链接]https://blog.csdn.net/harvic880925/article/details/50598322
ObjectAnimator是派生自ValueAnimator的,所以ValueAnimator中所能使用的方法,在ObjectAnimator中都可以正常使用。
但ObjectAnimator也重写了几个方法,比如ofInt(),ofFloat()等。我们先看看利用ObjectAnimator重写的ofFloat方法如何实现一个改变透明度的动画效果:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);//第一个参数为一个view控件
animator.setDuration(2000);//动画时间
animator.start();//开始动画
效果图如下:
20160128082308327 (1).gif
下面我们来具体分析一下这段代码的第一句,也就是ObjectAnimator的定义
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);//第一个参数为一个view控件
animator.setDuration(2000);//动画时间
animator.start();//开始动画
1.第一个参数用于指定这个动画要操作的是哪个控件
2.第二个参数用于指定这个动画要操作这个控件的哪个属性,比如上面的alpha就是一个改变透明度的属性。
3.第三个参数是可变长参数,这个就跟ValueAnimator中的可变长参数的意义一样了,就是指这个属性值是从哪变到哪。像我们上面的代码中指定的就是将textview的alpha属性从0变到1再变到0;
直接多来点实际的吧,我们在来看一个实现view旋转的例子:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotation",0,180,0);
animator.setDuration(2000);
animator.start();
实现效果图:
旋转.gif
上面可以看出第二个参数rotation就是实现旋转效果的,第三个参数的意思就是从0度转到180度再旋转到0度,那我们怎么知道第二个参数的每个值对应什么效果呢?
具体的原理我也懒得去分析了,涉及到View类里面对这个参数的set方法,我直接把每个参数和他对应的实现效果贴出来吧
alpha 实现改变透明度的动画效果
代码:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);//第一个参数为一个view控件
animator.setDuration(2000);//动画时间
animator.start();//开始动画
实现效果:
20160128082308327 (1).gif
rotation 实现旋转的动画效果
代码:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotation",0,180,0);
animator.setDuration(2000);
animator.start();
效果图:
旋转.gif
rotationX 实现绕x轴旋转的动画效果
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotationX",0,270,0);//绕x轴从0度旋转到270度再旋转到0度
animator.setDuration(2000);
animator.start();
效果图:
x.gif
rotationY 实现绕y轴旋转的动画效果
ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotationY",0,180,0);//绕Y轴从0度旋转到180度再旋转到0度
animator.setDuration(2000);
animator.start();
效果图:
y.gif
translationX 实现在X轴上平移距离,以当前控件为原点,向右为正方向
代码:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "translationX", 0, 200, -200,0);
animator.setDuration(2000);
animator.start();
实现效果:
x1.gif
从图中可以看出,平移效果是从原点往右平移200像素,又往左移动200像素,最后回到原点。
translationY 实现在Y轴上平移距离,以当前控件为原点,向下为正方向
代码:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "translationY", 0, 200, -100,0);
animator.setDuration(2000);
animator.start();
效果图:
y1.gif
scaleX 实现在X轴上进行缩放
代码:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "scaleX", 0, 3, 1);
animator.setDuration(2000);
animator.start();
效果图:
x2.gif
如图所示,在X轴上从0倍放大到3倍再缩为1倍
scaleX 实现在Y轴上进行缩放
代码:
ObjectAnimator animator = ObjectAnimator.ofFloat(tv, "scaleY", 0, 3, 1);
animator.setDuration(2000);
animator.start();
效果图:
y3.gif
好了,大致上所有的属性值的实现效果就在这里了,大家可以去具体实现一下看看,我也只是刚刚接触这个东西,有什么说错的地方希望大家在下面评论,一定会改进的,想要更深入了解的可以去看看我开头贴出来的那篇博客。