Android属性动画

写在前面

android属性动画可以作用在所有view上
android中的属性动画是会改变空间的真实位置,即属性动画执行了以后,相当于原来的view就没有了,原来的那个view就变成了执行完动画的那个view,坐标原点也变成了这个新的view的左上角坐标

代码方式定义属性动画

属性动画的定义方式相对来说简单了很多,用ObjectAnimator.ofFloat方法获取一个ObjectAnimator的对象,即可实现各种动画

公共的方法
//设置动画的持续时间
setDuration(2000);
 //设置动画播放完毕后是否保持在动画播放完毕的状态
setFillAfter(true);
/*
设置动画的重复次数,这里的重复次数指的是动画第一次播放完毕后还会重复播放几次,这里设置为3,就是动画一共播放四次,开始执行一次动画,然后再重复执行三次。
 */
setRepeatCount(3);
/*
设置动画重复的模式
有Animation.RESTART:在动画多次播放时每一次都和第一次一样,重复执行
 Animation.REVERSE:每一次执行动画是,和上一次执行相反的操作
例如动画是把view放大到原来的两倍,动画一共执行4次
如果是Animation.RESTART,就会每次都从view本身的大小变到2倍的大小,这一过程一共执行4次
如果是Animation.REVERSE,则第一回从本身大小到2倍,第二回从2倍到本身大小,第三回从2倍到view本身第四回再从view本身到2倍
*/
setRepeatMode(Animation.REVERSE);

1 透明动画

/*
                第一个参数:动画作用在哪个view上
                第二个参数:执行哪种动画,对于透明动画,只有alpha这一种值
                后面的参数是一个可变类型的参数,可以传入任意多个数值,数值范围是从0到1
                动画按照传入的数值的顺序执行,一次动画结束后停止在最后一个参数的位置。
                 */
                ObjectAnimator alphaAnimator=ObjectAnimator.ofFloat(imageView,"alpha",1.0f,0,1.0f);
                alphaAnimator.setDuration(2000);
                alphaAnimator.start();

2 缩放动画

 /*
                第一个参数:动画作用在哪个view上
                第二个参数:执行哪种动画,可以传入scaleX或者scaleY,在x方向或者y方向缩放
                后面的参数是一个可变类型的参数,可以传入任意多个数值,数值大小代表放大的倍数
                动画按照传入的数值的顺序执行,一次动画结束后停止在最后一个参数的位置。
                 */
              ObjectAnimator scaleAnimator =ObjectAnimator.ofFloat(imageView,"scaleX",1.0f,0.5f);
              scaleAnimator.setDuration(2000);
              scaleAnimator.start();

3 旋转动画

 /*
                第一个参数:动画作用在哪个view上
                第二个参数:执行哪种动画
                可以传入rotation:代表绕中心点旋转
                rotationX:绕穿过中心点的横轴立体的旋转
                rotationY:绕穿过中心点的纵轴立体的旋转
                后面的参数是一个可变类型的参数,可以传入任意多个数值,数值大小代表旋转的角度
                动画按照传入的数值的顺序执行,一次动画结束后停止在最后一个参数的位置。
                 */
                ObjectAnimator rotate=ObjectAnimator.ofFloat(imageView,"rotation",0,70,0);
                rotate.setDuration(2000);
                rotate.start();

4 位移动画

 /*
                第一个参数:动画作用在哪个view上
                第二个参数:执行哪种动画
                可以传入translationX:在x轴方向移动
                translationY:在y方向移动
                后面的参数是一个可变类型的参数,可以传入任意多个数值,数值代表移动到的坐标的位置
                动画按照传入的数值的顺序执行,一次动画结束后停止在最后一个参数的位置。
                 */
              ObjectAnimator translate=ObjectAnimator.ofFloat(imageView,"translationX",0,40.0f,0);
              translate.setDuration(2000);
              translate.start();

5 动画集合
5.1 定义动画的集合
注意是AnimatorSet 不是AnimationSet

 AnimatorSet set=new AnimatorSet();

5.2 定义集合内部的动画
这里定义了3个动画

ObjectAnimator alphaAnimator1=ObjectAnimator.ofFloat(imageView,"alpha",1.0f,0,1.0f);
ObjectAnimator rotate1=ObjectAnimator.ofFloat(imageView,"rotate",0,70f);
ObjectAnimator translate1=ObjectAnimator.ofFloat(imageView,"translateX",0,40f,0);

5.3 设置一些参数

set.setDuration(2000);

5.4 设置集合动画要作用的目标view

set.setTarget(imageView);

5.5 执行动画
可以选择以下两种方式中的一种

 //这个代表三个动画按照顺序执行
set.playSequentially(alphaAnimator1,rotate1,translate1);
//这个代表三个动画一起执行
set.playTogether(alphaAnimator1,rotate1,translate1);
用xml方式定义属性动画
公共的属性

不用多说,和上面完全一致,需要说一点,有时这些属性没有代码提示,直接手打出来就行。定义在set中代表可以应用于set中的所有动画,应用在单独的动画中代表只对该动画起作用

android:duration="2000"
android:repeatMode="restart"
android:repeatCount="3"
android:fillAfter="true"

用xml方式定义属性动画,首先需要在res下建立animator目录,在目录下建立动画文件,在文件中写xml代码。
属性动画定义单独的动画时格式基本相同
1 旋转动画




2 透明动画




3 缩放动画




4 位移动画




5 动画集合
动画集合只需要把需要的动画放入set标签中即可,而且set标签可以嵌套set标签。
set标签有一个独有的属性
android:ordering
值可以为
sequentially:动画按照set内部写入的动画的顺序依次执行
together:set内部写入的动画一起执行
例如写一个一起执行缩放和位移的动画





用代码定义的动画可以在多个值之间顺序变化,在xml好像没有这种属性,但是用set可以实现这种功能







6 执行动画
上面用xml方式定义的5中动画都有统一的执行过程
6.1 获取动画资源

Animator animator= AnimatorInflater.loadAnimator(this,R.animator.animator);

6.2 设置动画执行的目标

animator.setTarget(imageView);

6.3 开始动画

animator.start();

你可能感兴趣的:(Android属性动画)