本系列博客会分俩篇
本篇博客主要是会介绍属性动画代码使用和xml中使用
关于View动画和属性动画的区别不做过多的介绍,当然涉及到的地方会简单的提一下。
好了废话不多说,直接上内容
-
首先介绍代码中使用属性动画
首先介绍几个比较重要的类
- ValueAnimator
- ObjectAnimator
- AnimatorSet
其中ValueAnimator是一个基类,他主要是实现了属性动画值的变化,没有任何的动画效果。
ObjectAnimator继承ValueAnimator,并且实现了对对象的属性的操作,从而产生动画效果。
AnimatorSet这个类是一个可以同时执行多个动画效果的集合。
下面通过一个列子介绍,实现TextView在X轴方向的移动
ObjectAnimator translationXAnimator = ObjectAnimator.ofFloat(propertyAnim, "translationX",
currentTranslationX, -propertyAnim.getWidth(), currentTranslationX);
translationXAnimator.setDuration(2000);
translationXAnimator.start();
关于这段代码的解析
ofFloat() 参数解析,
第一个参数 动画作用对象(任意对象,这地方也是属性动画区别与View动画的)
第二个参数 动画作用的属性(这个地方需要注意,在设置属性的时候,要做到俩点要求,一下内容来自Android开发艺术探索)
1.设置的属性要有对应的set/get方法,否则可能无效果或者是奔溃;
2.set方法里面必须实现对属性的改变可以通过某种方式反映出来,否则无效果。
第三个参数是一个可变参数,进行指定动画的变化过程值
setDuration()
设置动画指定时间,长整形,单位 毫秒
start()
开始执行
其他api可以在博客最后下载源代码,里面有更详细的说明,以及AnimatorSet的使用
下面介绍xml中使用属性动画
这个就比较简单了直接上代码
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially">
<objectAnimator
android:duration="2000"
android:propertyName="translationX"
android:valueFrom="0"
android:valueTo="250"
android:valueType="floatType"
android:repeatMode="reverse"
android:repeatCount="2"/>
<objectAnimator
android:duration="1000"
android:propertyName="alpha"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
<set android:ordering="together">
<objectAnimator
android:duration="2000"
android:propertyName="rotation"
android:valueFrom="0"
android:valueTo="360"
android:valueType="floatType"/>
<objectAnimator
android:duration="3000"
android:propertyName="scaleX"
android:valueFrom="1.0"
android:valueTo="2.0"
android:valueType="floatType"/>
</set>
</set>
下面关于里面几个属性进行一下简单的说明
android:ordering=”sequentially” 多个动画执行的逻辑,顺序执行,一起执行
android:propertyName=”scaleX” 指定动画操作的属性
在api19 里面添加了 android:propertyXName android:propertyYName 俩个更加细分的属性
android:duration=”2000” 指定动画执行的时间
android:repeatCount=”2” 指定动画重复执行的次数
android:repeatMode=”reverse” 指定动画重复执行的模式,俩种
1.重复
2.逆向
android:valueFrom=”1.0” 动画操作属性起始值
android:valueTo=”2.0” 动画操作属性结束值
android:valueType=”floatType” 动画操作属性变化类型
通过对比会发现,在使用属性动画的时候,通过代码实现会更加的简单实用,在xml文件中实现动画,会有好多局限,比如平移的时候位置的设置等等,所以推荐使用代码实现属性动画
还要说明的一点是个人的理解,各位看不看随便了
属性动画没有复位这一说法,View动画有。
这个地方其实可以很好的说明了View动画的局限,还有属性动画在View动画上面的优势,
因为View动画只是效果的展示,并没有实现改变View的属性,所以正常情况在执行完复位是很有必要的,不会影响界面逻辑和各种事件;
但是属性动画则不同,属性动画是通过不停的改变对象的属性,所以在执行完成后,所见即所得,没有必要复位,不会对对象有影响,如果有需要,可以在动画开启前记录下初始值,在动画结束后进行赋值操作,实现复位。(该方法来来自一位群友的建议)