美文网首页
ObjectAnimator

ObjectAnimator

作者: 会写代码的小猿猴 | 来源:发表于2021-05-19 17:33 被阅读0次

    新来公司接手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

    好了,大致上所有的属性值的实现效果就在这里了,大家可以去具体实现一下看看,我也只是刚刚接触这个东西,有什么说错的地方希望大家在下面评论,一定会改进的,想要更深入了解的可以去看看我开头贴出来的那篇博客。

    相关文章

      网友评论

          本文标题:ObjectAnimator

          本文链接:https://www.haomeiwen.com/subject/oripjltx.html