美文网首页
Android属性动画

Android属性动画

作者: shenlong77 | 来源:发表于2017-05-22 22:02 被阅读0次
写在前面

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 旋转动画

<!--
根元素为objectAnimator
propertyName代表动画的类型,和用代码定义的类型一致
valueType:代表传入的值的类型,floatType对应代码中的ofFloat,实际中用floatType就可以了
valueFrom:动画起始值
valueTo:动画结束值
-->
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="rotation"
    android:valueType="floatType"
    android:valueFrom="0"
    android:valueTo="360"
    >
</objectAnimator>

2 透明动画

<!--
根元素为objectAnimator
propertyName代表动画的类型,和用代码定义的类型一致
valueType:代表传入的值的类型,floatType对应代码中的ofFloat,实际中用floatType就可以了
valueFrom:动画起始值,范围从0到1
valueTo:动画结束值
-->
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="alpha"
    android:valueType="floatType"
    android:valueFrom="1"
    android:valueTo="0"
    >
</objectAnimator>

3 缩放动画

<!--
根元素为objectAnimator
propertyName代表动画的类型,和用代码定义的类型一致
valueType:代表传入的值的类型,floatType对应代码中的ofFloat,实际中用floatType就可以了
valueFrom:动画起始值,起始缩放比例
valueTo:动画结束值,结束缩放比例
-->
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="scaleX"
    android:valueType="floatType"
    android:valueFrom="1"
    android:valueTo="2"
    >
</objectAnimator>

4 位移动画

<!--
根元素为objectAnimator
propertyName代表动画的类型,和用代码定义的类型一致
valueType:代表传入的值的类型,floatType对应代码中的ofFloat,实际中用floatType就可以了
valueFrom:动画起始值,起始view左上角横坐标或者纵坐标的位置
valueTo:动画结束值,结束起始view左上角横坐标或者纵坐标的位置
-->
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="translationX"
    android:valueType="floatType"
    android:valueFrom="0"
    android:valueTo="200"
    >
</objectAnimator>

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

<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:ordering="together">
<objectAnimator
    android:valueType="floatType"
    android:propertyName="scaleX"
    android:valueFrom="1"
    android:valueTo="2"/>
<objectAnimator
    android:propertyName="translationX"
    android:valueType="floatType"
    android:valueFrom="0"
    android:valueTo="200"/>
</set>

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

<!--
android:ordering="sequentially"则set内的动画依次执行
以透明动画为例
可以先从1到0,再从0到1,再从1到0
这样就实现了和用代码定义的一样的在不同值之间变化的功能
-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:ordering="sequentially">
<objectAnimator
    android:valueType="floatType"
    android:propertyName="alpha"
    android:valueFrom="1"
    android:valueTo="0"/>
<objectAnimator
    android:valueType="floatType"
    android:propertyName="alpha"
    android:valueFrom="0"
    android:valueTo="1"/>
<objectAnimator
    android:valueType="floatType"
    android:propertyName="alpha"
    android:valueFrom="1"
    android:valueTo="0"/>
</set>

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

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

6.2 设置动画执行的目标

animator.setTarget(imageView);

6.3 开始动画

animator.start();

相关文章

网友评论

      本文标题:Android属性动画

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