属性动画:ValueAnimator类和ObjectAnimator类的简单使用

ValueAnimator 和 ObjectAnimator只能在android3.0以上版本中使用,在低版本中使用会出现问题,一定要在低版本中使用,请使用动画兼容库nineoldandroids库

ValueAnimator类: 

ValueAnimator anim = ValueAnimator.ofInt(0, 3);
        // ofInt()作用有两个
        // 1. 创建动画实例
        // 2. 将传入的多个Int参数进行平滑过渡:此处传入0和1,表示将值从0平滑过渡到1
        // 如果传入了3个Int参数 a,b,c ,则是先从a平滑过渡到b,再从b平滑过渡到C,以此类推
        // ValueAnimator.ofInt()内置了整型估值器,直接采用默认的.不需要设置,即默认设置了如何从初始值 过渡到 结束值
        // 关于自定义插值器我将在下节进行讲解
        // 下面看看ofInt()的源码分析 ->>关注1

// 步骤2:设置动画的播放各种属性
        anim.setDuration(500);
        // 设置动画运行的时长

        anim.setStartDelay(500);
        // 设置动画延迟播放时间

        anim.setRepeatCount(0);
        // 设置动画重复播放次数 = 重放次数+1
        // 动画播放次数 = infinite时,动画无限重复//ValueAnimator.INFINITE

        anim.setRepeatMode(ValueAnimator.RESTART);
        // 设置重复播放动画模式
        // ValueAnimator.RESTART(默认):正序重放
        // ValueAnimator.REVERSE:倒序回放

// 步骤3:将改变的值手动赋值给对象的属性值:通过动画的更新监听器
        // 设置 值的更新监听器
        // 即:值每次改变、变化一次,该方法就会被调用一次
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {

                int currentValue = (Integer) animation.getAnimatedValue();
                // 获得改变后的值

                System.out.println(currentValue);
                // 输出改变后的值

        // 步骤4:将改变后的值赋给对象的属性值,如设置view对象的长宽,间距,旋转等
                View.setproperty(currentValue);

       // 步骤5:刷新视图,即重新绘制,从而实现动画效果
                View.requestLayout();


            }
        });

        anim.start();
        // 启动动画

也可以在xml定义属性动画,这样可在各个界面重用

  • 步骤1:在路径 res/animator的文件夹里创建相应的动画 .xml文件

    此处设置为res/animator/set_animation.xml

  • 步骤2:设置动画参数

    // ValueAnimator采用  标签
     
    
    ---------------------
    
    本文来自 Carson_Ho 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/carson_ho/article/details/72909894?utm_source=copy 

     

  • 步骤3:在Java代码中启动动画
    Animator animator = AnimatorInflater.loadAnimator(context, R.animator.set_animation);  
    // 载入XML动画
    
    animator.setTarget(view);  
    // 设置动画对象
    
    animator.start();  
    // 启动动画
    
    ---------------------
    
    本文来自 Carson_Ho 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/carson_ho/article/details/72909894?utm_source=copy 

    ObjectAnimator类

  • ObjectAnimator类继承自ValueAnimator类,后者的方法,前者都可以使用
    ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);  
    animator.setDuration(2000);  
    animator.start(); 

    使用demo如上,第二个参数alpha为要改变的view的参数

  • ObjectAnimator 做动画,并不是根据控件 xml 中的属性来改变的,而是通过指定属性所对应的 set 方法来改变的。比如,我们上面指定的改变 rotation 的属性值,ObjectAnimator 在做动画时就会到指定控件(TextView)中去找对应的 setRotation()方法来改变控件中对应的值。同样的道理,当我们在最开始的示例代码中,指定改变”alpha”属性值的时候,ObjectAnimator 也会到 TextView 中去找对应的 setAlpha()方法。那 TextView 中都有这些方法吗,有的,这些方法都是从 View 中继承过来的,在 View 中有关动画,总共有下面几组 set 方法:

    //1、透明度:alpha  
    public void setAlpha(float alpha)  
    
    //2、旋转度数:rotation、rotationX、rotationY  
    public void setRotation(float rotation)  
    public void setRotationX(float rotationX)  
    public void setRotationY(float rotationY)  
    
    //3、平移:translationX、translationY  
    public void setTranslationX(float translationX)   
    public void setTranslationY(float translationY)  
    
    //缩放:scaleX、scaleY  
    public void setScaleX(float scaleX)  
    public void setScaleY(float scaleY) 

详细细节可参考:

http://wiki.jikexueyuan.com/project/android-animation/7.html

https://blog.csdn.net/carson_ho/article/details/72909894 

你可能感兴趣的:(android)