属性动画: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采用<animator>  标签
    <animator xmlns:android="http://schemas.android.com/apk/res/android"  
        android:valueFrom="0"   // 初始值
        android:valueTo="100"  // 结束值
        android:valueType="intType" // 变化值类型 :floatType & intType
    
        android:duration="3000" // 动画持续时间(ms),必须设置,动画才有效果
        android:startOffset ="1000" // 动画延迟开始时间(ms)
        android:fillBefore = “true” // 动画播放完后,视图是否会停留在动画开始的状态,默认为true
        android:fillAfter = “false” // 动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为false
        android:fillEnabled= “true” // 是否应用fillBefore值,对fillAfter值无影响,默认为true
        android:repeatMode= “restart” // 选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restart|
        android:repeatCount = “0” // 重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复
        android:interpolator = @[package:]anim/interpolator_resource // 插值器,即影响动画的播放速度,下面会详细讲
    
    /> 
    
    ---------------------
    
    本文来自 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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值