属性动画
一、首先说一下帧动,大体来说可以分为4个步揍
帧动画:放电影(一帧一帧的图片 连续播放)
* 1、在drawable文件夹下创建标签是animtion_list文件
* 2、在该文件中添加图片
* 3、在ImageView中加载图片
* 4、开始动画*/
/**
img = (ImageView) findViewById(R.id.img);
/**通过控件 获取背景图片*/
AnimationDrawable ad = (AnimationDrawable) img.getBackground();
/**动画图片播放*/
ad.start();
二、我们来看一下补间动画
☆☆☆:补间动画不会真真改变 控件的位置
Animation:动画类
以下方法是所有动画都有的
aa.setDuration(2000);//ms:毫秒 该动画的变化过程将会在2s中内完成
aa.setFillAfter(true);//动画效果结束后 保持当前效果
/**重复的个数
aa.setRepeatCount(1);
* 重复的模式
* Animation.RESTART:重新开始
* Animation.REVERSE:反向
aa.setRepeatMode(Animation.REVERSE);
补间动画(tween):
透明(alpha):
旋转(rotate):
平移(translate):
缩放(scale):*/
我们这里定义了5种类,分别是 :
AlphaAnimation(透明动画类)
RotateAnimation(旋转动画类)
ScaleAnimation(缩放动画类)
TranslateAnimation(平移动画类)
AnimationSet(相当于添加动画的集合)
查阅了相应资料收集了一些动画属性
补间动画的属性
Animation的属性
JAVA方法 | XML属性 | 解释 |
---|---|---|
setDetachWallpaper(boolean) | android:detachWallpaper | 是否在壁纸上运行 |
setDuration(long) | android:duration | 设置动画持续时间,单位为毫秒 |
setFillAfter(boolean) | android:fillAfter | 控件动画结束时控件是否保持动画最后状态 |
setFillBefore(boolean) | android:fillBefore | 控件动画结束时控件是否还原到开始动画前的状态 |
setFillEnable(boolean) | android:fillEnable(boolean) | 与android:fillBefore效果相同 |
setInterpolator(boolean) | android:interpolator | 设置插值器(指定的动画效果,如:回弹等) |
setRepeatCount(int) | android:repeatCount | 重复次数 |
setRepeatMode(int) | android:repeatMode | 重复类型:reverse倒序回放、restart从头播放 |
setStartOffset(long) | android:startOffset | 调用start函数后等待开行运行的时间,单位为毫秒 |
setZadjustment(int) | android:zAdjustment | 表示被设置动画的内容运行时在Z轴的位置(top/bottom/normal),默认为normal |
由于Animation类是其抽象父类,那么我们在使用补间动画无论是哪一种都已经具备了以上属性。
下面是每一种补间动画的特有属性:
Alpha属性
JAVA方法 | XML属性 | 解释 |
---|---|---|
AlphaAnimation(float fromAlpha,…) | android:fromAlpha | 动画开始的透明度(0.0到1.0,0.0是全透明,1.0是不透明) |
AlphaAnimation(…, float toAlpha) | androdi:toAlpha | 动画结束的透明度(同上) |
Rotate属性
JAVA方法 | XML属性 | 解释 |
---|---|---|
RotateAnimation(float fromDegrees, …) | android:fromDegress | 旋转开始角度,正代表顺时针度数,负代表逆时针度数 |
RotateAnimation(…, float toDegress) | android:toDegress | 旋转结束角度(同上) |
RotateAnimation(…, …, float pivotX, …) | android:pivotX | 缩放起点X坐标(数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点) |
RotateAnimation(…, …, …, pivotY) | android:pivotY | 缩放起点Y坐标(同上) |
Scale属性
JAVA方法 | XML属性 | 解释 |
---|---|---|
ScaleAnimation(float fromX, …) | android:fromXScale | 初始X轴缩放比例,1.0表示无变化 |
ScaleAnimation(…, float toX) | android:toXScale | 结束X轴缩放比例 |
ScaleAnimation(…, …, float fromY, …) | androd:fromYScale | 初始Y轴缩放比例 |
ScaleAnimation(…, …, …, float toY) | android:toYScale | 结束Y轴缩放比例 |
ScaleAnimation(…, float pivotX, …) | android:pivotX | 缩放起点X轴坐标(同上) |
ScaleAnimation(…, float pivotY) | android:pivotY | 缩放起点Y轴坐标(同上) |
Translate属性
JAVA方法 | XML属性 | 解释 |
---|---|---|
TranslateAnimation(float fromXDelta, …) | android:fromXDelta | 平移起始点X轴坐标 |
TranslateAnimation(…, float toXDelta) | android:toXDelta | 平移结束点X轴坐标 |
TranslateAnimation(…, float fromYDelta, …) | android:fromYDelta | 平移起始点Y轴坐标 |
TranslateAnimation(…, float toYDelta) | android:toYDelta | 平移结束点Y轴坐标 |
AnimationSet属性
AnimationSet类比较特殊,因为该类是以上4类的组合容器管理类,没有自己特有的属性,它的属性继承自它的父类:Animation。
我们在使用的时候需要注意,当我们在对set标签设置属性的时候,那么其标签下的所有控件都会产生影响。
补间动画的另一种设置方法是在xml文件中设置,在res文件夹下创建几种动画的文件夹,然后在对应的动画文件夹下创建对应的动画标签文件
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha);//alpha为动画名
iv.startAnimation(animation);
三、第三种属性动画,顾名思义可以操作控件的属性,且控件一定要有该属性的get set方法,且会改变控件的真实位置
ObjectAnimator animator = ObjectAnimator.ofFloat(textView,"alpha",1f,0f,1f);
animator.setDuration(5000);
animator.start();
属性动画常用的类ObjectAnimator我们还是调用了ofFloat()方法来去创建一个ObjectAnimator的实例,只不过ofFloat()方法当中接收的参数有点变化了。这里第一个参数要求传入一个object对象,我们想要对哪个对象进行动画操作就传入什么,这里我传入了一个textview。第二个参数是想要对该对象的哪个属性进行动画操作,由于我们想要改变TextView的不透明度,因此这里传入"alpha"。后面的参数就是不固定长度了,想要完成什么样的动画就传入什么值,这里传入的值就表示将TextView从常规变换成全透明,再从全透明变换成常规。之后调用setDuration()方法来设置动画的时长,然后调用start()方法启动动画