1.Animation的四种类型
TranslateAnimation 位移动画
RotateAnimation 旋转动画
AlphaAnimation 透明度渐变动画
ScaleAnimation 缩放动画
2.构造方法
四种类型的动画均可以通过 Animaion(Context context,int resId) 来加载res下定义的.anim文件
在搞清楚其构造方法前,要弄清楚Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT和Animation.ABSOLUTE;
Animation.RELATIVE_TO_SELF是以执行动画的View作为参考,
Animation.RELATIVE_TO_PARENT是以执行动画的View所在的父控件作为参考;
Animation.ABSOLUTE是以坐标轴的绝对值作为参考
这种“参考”是不同类型的动画中是以不同的形式进行诠释的;
TranslateAnimation(fromXType, fromXValue, toXType, toXValue, fromYType, fromYValue, toYType, toYValue)
位移动画是从一个坐标点移动到另一个坐标点,每个坐标点包含X轴和Y轴两个参量,所以一共是四个参数,
即从(fromXValue,fromYValue)移动到(toXValue,toYValue);
而构造方法中的多个Type即为上述三种参考;
“RELATIVE”是相对的, 即(fromXValue,fromYValue)和(toXValue,toYValue)的具体偏移量是由type相对性来确定的;比如 type = Animation.RELATIVE_TO_SELF时,fromXValue= 0,fromYValue = 0,toXValue = 1,toYValue =1
意味着动画将从当前位置向X轴正向移动(向右)自身长度,向Y轴正向(向下)移动自身高度;
type = Animation.RELATIVE_TO_PARENT时,fromXValue= 0,fromYValue = 0,toXValue = 1,toYValue =1
意味着动画将从当前位置向X轴正向移动(向右)父控件的长度,向Y轴正向(向下)移动父控件高度;
值得注意的是 type = Animation.RELATIVE_TO_PARENT,fromXValue= 0,fromYValue = 0,toXValue = 1,toYValue =1时,
动画的起始位移并不是从父控件的左上角开始,而是从控件的当前位置开始;
而type = Animation.RELATIVE_TO_PARENT,fromXValue= 1,fromYValue = 0,toXValue = 1,toYValue =1时,
动画在开始前,控件将有一个X轴负向(向左)父控件长度的偏移,再执行动画;
综上可知,type为“RELATIVE”时,初始位置的相对性是以空间的原始位置和fromXVAlue、fromYVAlue决定的,不管相对的是自身还是父控件,都是一样的;而动画的偏移量则是由type和value共同决定的;
另一种“参考”为ABSOLUTE,大多数情况下一般不要用,因为算位置真的很麻烦。
另外三种类型的构造方法与TranslateAnimation差不多
RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue)
fromDegrees表示起始角度,toDegrees表示最终角度,
toDegrees>fromDegrees 顺时针旋转
toDegrees<fromDegrees 逆时针旋转
后面的四个参数,两个type两个value,作用是确定旋转的圆心
ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue)
fromX, toX, fromY, toY四个参数
=1.0时 表示控件的原始大小,
<1.0时 表示控件被缩小
>1.0时 表示控件被放大
后面四个参数,也是两个type两个value,作用是确定缩放的中心点
AlphaAnimation(fromAlpha, toAlpha)
fromAlpha, toAlpha两个参数
=1.0时表示完全不透明
=0时表示完全透明
3.参数设置
setFillAfter 设置为true时, 动画结束时画面停留在最后一帧,默认为false
setFillBefore 设置为true时, 动画结束时画面停留在第一帧,默认为true
setFillEnable 设置为true时,将执行setFillBefore和setFillAfter方法,默认为true
setRepeatCount 设置重复次数,是重复次数,而不是动画执行的次数,比如设置重复1次,则动画将执行2次
setRepeatMode RESTART 重新从头执行 REVERSE 反方向执行,设置为REVERSE,重复1次 将回到初始状态
值得注意的是,这个REVERSE是将原动画沿着时间轴的反方向重新复述出来,而不是朝着反方向按照原动画的逻辑执行一编,将Interpolator设置为bounce自明
setStartOffset 在动画开始前设置一个延时效果
setStartTime 设置为START_ON_FIRST_FRAME, 动画将在getTransformation(long, Transformation)方法被调用时立即启动.
setZAdjustment 设置播放的Z轴(层次),如果有多个动画,可以设定哪个动画显示在上层
setAnimationListener() 设置动画执行过程的监听
4.Interpolator
系统自带的:通过setInterpolator(context, android.R.interpolator.xxx)设置
AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
AnticipateInterpolator 阶段一,有一个与动画方向相反的偏移量,阶段二,折返到目标位置
AnticipateOvershootInterpolator 阶段一,有一个与动画方向相反的偏移量,阶段二,折返到目标位置后有一个与动画方向相同的溢出量,阶段三,回到目标位置
BounceInterpolator 类似自由落体的乒乓球的振幅逐渐减小的振动效果,最终到目标位置
CycleInterpolator 类似弹性很强的球,其弹起的高度将超过初始高度,最终回到初始位置,不是回到目标位置,位移量的作用是确定动画的波峰和波谷
DecelerateInterpolator 在动画开始的地方快然后慢
LinearInterpolator 匀速
OvershootInterpolator 溢出效果
Accelerate 加快
Decelerate 减速
Interpolator 插补器
Anticipate 预期--->先偏移
Overshoot 超出--->溢出
Bounce 反弹
Cycle 循环
Linear 线性
自定义:通过new一个Interpolator并override其getInterpolation(float input)方法自定义