1.Frame Animation
1.1-AnimationDrawable使用JAVA代码定义动画
1.2-XML
首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画,当前帧的drawable资源和当前帧持续的时间。
1.2.1-属性
drawable
duration
oneshot-true为不可循环
visible-初始可见
variablePadding-true为选中时内边距可变
- <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="true">
- <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
- <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
- <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
- </animation-list>
2种实现思路:
从ImageView获取强转,在动作里使用AnimationDrawable.start();
通过AnimationDrawable.addFrame(),在动作里使用AnimationDrawable.start();
2.Tween Animation
TranslateAnimation-平移-定义两点之间的位置 fromXDelta/toXDelta-fromYDelta/toYDelta
AlphaAnimation-透明-fromAlpha/toAlpha
0.0表示完全透明
1.0表示完全不透明
ScaleAnimation-缩放-缩放的原点(pivotX/pivotY)百分比时为物体本身比例 缩放前(fromXScale/fromYScale) 缩放后(toXScale/toYScale)
值小于1.0表示收缩值大于1.0表示放大
RotateAnimation-旋转-旋转的原点(pivotX/pivotY)两个角度(fromDegrees/toDegrees)正为顺时针/负为逆时针
2.1-AnimationSet-定义一组TweenAnimation 即多个动画同时执行
定义时可控制多个动画是否同一时间变换。
- AnimatorSet bouncer = new AnimatorSet();
- bouncer.play(anim1).before(anim2);
- bouncer.play(anim2).with(anim3);
- bouncer.play(anim2).with(anim4)
- bouncer.play(anim5).after(amin2);
- animatorSet.start();
2.2-Tween Animation共同的节点属性
Duration-时间以毫秒为单位
/*****动画结束时,停留在最后一帧*********
setFillAfter(true);
setFillBefore(false);
/*****动画结束时,停留在第一帧*********
setFillAfter(false);
setFillBefore(true);
interpolator-accelerate_decelerate_interpolator(加速-减速 动画插入器)/accelerate_interpolator
-(加速-动画插入器)/decelerate_interpolator/(减速- 动画插入器)
repeatCount
RepeatMode-定义重复的行为 1:重新开始 2:plays backward
startOffset-动画之间的时间间隔
zAdjustment- 0:保持Z Order不变 1:保持在最上层 -1:保持在最下层
2.3-Tween Animation如何使用
使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件然后点用startAnimation()
或者使用某个组件的setAnimation()方法。
3.LayoutAnimationController
LayoutAnimationController为Layout或者viewGroup里的控件设置动画效果,特点是它会使其中的每个控件都有相同的动画效果,这些控件的动画效果可以在不同的时间显示出来。
1>创建AnimationSet .
2>创建LayoutAnimationController。
3>设置动画顺序/延迟时间
4>设置某个View的setLayoutAnimation();
3.1-创建某个LayoutAnimation的XML文件
在布局文件里直接使用: android:layoutAnimation="@anim/***"
其XML如
- <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android“
- android:delay="0.5"
- android:animationOrder="random"/"normal"/"reverse"
- android:animation="@anim/***"
- />
4.AnimationListener
AnimationListener是一个监听器,它在动画执行的各个阶段会得到通知,并且调用相应的方法
可以为
Animation设置监听器 需要实现3个方法
onAnimationStart 、onAnimationEnd、onAnimationRepeat
当动画运行时间执行Start End方法 当设置repeatMode时,运行Repeat方法
5.Property Animation-属性动画
公共属性/重要
TimeInterpolation:属性值的计算方式,如先快后慢
TypeEvaluator:根据属性的开始、结束值与TimeInterpolation计算出的因子计算出当前时间的属性值
Repeat Country and behavoir:重复次数与方式,如播放3次、5次、无限循环,可以此动画一直重复,或播放完时再反向播放
Frame refreash delay:多少时间刷新一次,即每隔多少时间计算一次属性值,默认为10ms,最终刷新时间还受系统进程调度与硬件的影响
ValueAnimator即表示一个动画,包含动画的开始值,结束值,持续时间等属性。
ValueAnimator封装了一个TimeInterpolator,TimeInterpolator定义了属性值在开始值与结束值之间的插值方法。
ValueAnimator还封装了一个TypeAnimator,根据开始、结束值与TimeIniterpolator计算得到的值计算出属性值。
--计算出时间因子。即瞬时速度
--通过插值器提供的公式计算出插值因子。
--根据TypeEvaluator的类型计算出属性值。