属性动画详解

属性动画在Android3.0之后推出的,通过修改控件的属性,从而实现的动画效果。属性动画是真正改变了控件的属性。

【属性动画详解】包括ValueAnimator和ObjectAnimation;
动画类的命名不同:View Animation中动画类取名都叫XXXXAnimation,而在Property Animator中动画类的取名则叫XXXXAnimator,

ObjectAnimator是派生自ValueAnimator的,所以ValueAnimator中所能使用的方法,在ObjectAnimator中都可以正常使用。

知识储备:
使用到的属性解释如下:
duration:动画时长,毫秒为单位;
透明度:1为完成不透明,0为完全透明;
repeatCount:重复次数,默认为 0 就是不重复,1 则代表再重复一次,注意是再重复一次,也就是总共执行了两次,ValueAnimator.INFINITE代表无限循环;

repeatMode:重复模式,有两个值可选:RESTART 当一个动画到达结尾时,如果需要重复播放,那么就初始位置状态开始播放。REVERSE 当一个动画到达结尾时,如果需要重复播放,那么就从结束状体开始逆向播放;
android:fillAfter如果设置为true,控件动画结束时,将保持动画最后时的状态;
android:fillBefore如果设置为true,控件动画结束时,还原到开始动画前的状态;
android:fillEnabled与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态;
android:interpolator设定插值器,其实就是指定的动作效果,比如弹跳效果等。

1、透明度渐变动画,alpha
android:fromAlpha动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
android:toAlpha动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

属性动画详解
文章图片


代码实现:

// 参数1:要修改的目标控件 // 参数2:属性名称,目标控件的属性名称 // 参数3:属性的值,可变参数,可以设置多个值 ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv, "alpha", 0, 1, 0.5f, 1); // 设置动画的时长 objectAnimator.setDuration(3000); // 设置动画的重复次数 objectAnimator.setRepeatCount(2); // 设置动画的重复模式 objectAnimator.setRepeatMode(ValueAnimator.REVERSE); // 启动动画 objectAnimator.start();


2、平移动画,translationX、translationY
android:fromXDelta起始点X轴坐标,可以是数值、百分数、百分数p 三种样式;
android:fromYDelta起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
android:toXDelta结束点X轴坐标
android:toYDelta结束点Y轴坐标

属性动画详解
文章图片



//设置x方向平移 ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv, "translationX", 0, 200); objectAnimator.setDuration(2000); objectAnimator.start();

3、缩放动画,scaleX、scaleY
缩放scale:
android:fromXScale起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
android:toXScale结尾的X方向上相对自身的缩放比例,浮点值;
android:fromYScale起始的Y方向上相对自身的缩放比例,浮点值,
android:toYScale结尾的Y方向上相对自身的缩放比例,浮点值;
android:pivotX缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。
android:pivotY缩放起点Y轴坐标,取值及意义跟android:pivotX一样。
参数中:pivotXType,它的取值有三个,Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF和Animation.RELATIVE_TO_PARENT

属性动画详解
文章图片



ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv, "scaleX", 1, 2); objectAnimator.setDuration(2000); objectAnimator.start();

4、旋转动画,rotation、rotationX、rotationY
android:fromDegrees开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
android:toDegrees结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
android:pivotX起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
android:pivotY起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

属性动画详解
文章图片


旋转有 3 种,rotation:绕着控件中心点顺时针旋转;rotationX:绕着控件的X轴旋转;rotationY:绕着控件的Y轴旋转。
旋转的角度是以角度值为单位的,范围介于[0,360]。


ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv, "rotation", 0, 360); objectAnimator.setDuration(2000); //设置重复次数 objectAnimator.setRepeatCount(ValueAnimator.INFINITE); //设置重复模式 objectAnimator.setRepeatMode(ValueAnimator.RESTART); objectAnimator.start();

5、动画集合
属性动画详解
文章图片



//创建一个属性动画集合 AnimatorSet animatorSet = new AnimatorSet(); ObjectAnimator rotationAnimator = ObjectAnimator.ofFloat(iv, "rotation", 0, 360); rotationAnimator.setDuration(2000); //设置重复次数 rotationAnimator.setRepeatCount(ValueAnimator.INFINITE); //设置重复模式 rotationAnimator.setRepeatMode(ValueAnimator.RESTART); ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(iv, "scaleX", 1, 2); scaleAnimator.setDuration(2000); scaleAnimator.setRepeatCount(ValueAnimator.INFINITE); //一个一个动画一次执行 //animatorSet.playSequentially(rotationAnimator,scaleAnimator); //同时执行所有动画 animatorSet.playTogether(rotationAnimator,scaleAnimator); animatorSet.start();

6、xml实现属性动画
属性动画详解
文章图片


在res目录下创建animator文件夹,然后创建一个objectAnimator资源文件。



代码中:

// 参数2:属性动画的资源文件id Animator animator = AnimatorInflater.loadAnimator(this, R.animator.property_anim); // 设置目标控件 animator.setTarget(iv); // 启动动画 animator.start();


GitHub上代码地址




    推荐阅读