android动画主要分为三类:补间动画(Tween Animation)、逐帧动画(Frame Animation或Drawable Animation)和属性动画(Property Animation)。
补间动画我们平时用的比较多,主要用于简单的缩放、平移、旋转、透明度基本的动画。
逐帧动画主要是通过一张张的图片来产生动画效果,如我们自定义刷新的菊花图等等
属性动画是android3.0添加了一种新的动画方式,之前还在用nineoldandroids来兼容android3.0以下的版本,不过现在2.2的系统基本上没有了。
今天我们介绍较为简单的补间与逐帧动画。
通常我们在res目录新建anim的文件夹用于存放动画的xml文件
Tween Animation
- 缩放12345678<scale xmlns:android="http://schemas.adnroid.com/apk/res/android"android:fromXScale="1.0"//缩放x轴比例android:toXScale="3.0"android:fromYScale="1.0"//缩放y轴比例android:toYScale="3.0"android:pivotX="50%"//缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式android:pivotY="50%"//缩放起点Y轴坐标/>
除了这些还有这些共有动画属性
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与fillBefore 效果相同。
- android:interpolator 设定插值器(也叫补间器)。
- android:duration 动画持续时间,以毫秒为单位
插值器可以让动画按照一定的频率运动,实现加速、加速、重复、回弹等效果。常用插值器及使用
| 插值器 | 资源ID(@android:anim/) | 说明 |
|---|---|---|
| AccelerateDecelerateInterpolator | accelerate_decelerate_interpolator | 在动画开始与结束的地方速率改变比较慢,在中间的时候加速 |
| AccelerateInterpolator | accelerate_interpolator | 在动画开始的地方速率改变比较慢,然后开始加速 |
| AnticipateInterpolator | anticipate_interpolator | 开始的时候向后然后向前甩 |
| AnticipateOvershootInterpolator | anticipate_overshoot_interpolator | 开始的时候向后然后向前甩一定值后返回最后的值 |
| BounceInterpolator | bounce_interpolator | 动画结束的时候弹起 |
| CycleInterpolator | cycle_interpolator | 动画循环播放特定的次数,速率改变沿着正弦曲线 |
| DecelerateInterpolator | decelerate_interpolator | 在动画开始的地方快然后慢 |
| LinearInterpolator | linear_interpolator | 以常量速率改变 |
| OvershootInterpolator | overshoot_interpolator | 向前甩一定值后再回到原来位置 |
平移
1234567<translate xmlns:android="http://schemas.android.com/apk/res/android"android:duration="300"android:fromXDelta="0"//起始点X轴坐标,可以是数值、百分数、百分数p 三种样式android:toXDelta="100%p"//结束点X轴坐标android:fromYDelta="0"//起始点Y轴坐标android:toYDelta="100%p"// 结束点Y轴坐标/>旋转
1234567<rotate xmlns:android="http://schemas.android.com/apk/res/android"android:duration="300"android:fromDegrees="0"//开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数android:toDegrees="360"//结束时旋转到的角度位置android:pivotY="50%"// 旋转起点X轴坐标,可以是数值、百分数、百分数p 三种样式android:pivotX="50%" //旋转起点Y轴坐标/>透明度
12345<alpha xmlns:android="http://schemas.android.com/apk/res/android"android:duration="300"android:fromAlpha="0.1"//动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明android:toAlpha="1"//动画结束时的透明度/>
5.组合动画
在实际使用中我们往往需要几种动画同时产生效果,比如需要图片有小到大、旋转加渐变显示,这时候单一的动画效果已经不能满足我们的需求了。
这时候我们就需要使用组合动画的标签set
当然除了将动画现在xml中,也可通过纯Java来实现,起对应关系如下
| 动画类型 | xml配置 | 纯Java |
|---|---|---|
| 透明度 | < alpha /> | AlphaAnimation |
| 缩放 | < scale /> | ScaleAnimation |
| 旋转 | < rotate /> | RotateAnimation |
| 移动 | < translate /> | TranslateAnimation |
| 组合动画 | < set /> | AnimationSet |
Activity中主要通过以下代码调用
Frame Animation
逐帧动画主要是通过animation-list标签实现
然后在布局文件
最后
这期我们就简单介绍动画的类型,以及基本的动画实现,下期我们介绍属性动画的相关内容。