动画相关知识点总结

动画相关
1.在Android动画中,总共有两种类型的动画View Animation(视图动画)和Property Animator(属性动画);
View Animation(视图动画)包括Tween Animation(补间动画)和Frame Animation(逐帧动画); 
Property Animatorr(属性动画)包括ValueAnimator和ObjectAnimation;
补间动画:Animation,只有alpha、scale、translate、rotate四中方式,可以组合成set,但是没有before,after,together属性;支持Interpolator插值器。
                                      xml及java中对应的标签及类关系
scale —— ScaleAnimation
alpha —— AlphaAnimation
rotate —— RotateAnimation
translate —— TranslateAnimation
set —— AnimationSet只有addAnimation (Animation a)一个方法
属性动画:Animator,支持的属性都可以操作,有AnimatorSet组合动画类,有before,after,together属性;


2.假设我们将一个按钮从左上角利用补间动画将其移动到右下角,在移动过程中和移动后,这个按钮都是不会响应点击事件的。这是为什么呢?因为补间动画仅仅转变的是控件的显示位置而已,并没有改变控件本身的值。
View Animation的动画实现是通过其Parent View实现的,在View被drawn时Parents View改变它的绘制参数,这样虽然View的大小或旋转角度等改变了,但View的实际属性没变,所以有效区域还是应用动画之前的区域;
我们看到的效果仅仅是系统作用在按钮上的显示效果,利用动画把按钮从原来的位置移到了右下角,但按钮内部的任何值是没有变化的,所以按钮所捕捉的点击区域仍是原来的点击区域。(下面会举例来说明这个问题) 
这就得到了第三点不同:补间动画虽能对控件做动画,但并没有改变控件内部的属性值。而Property Animator则是恰恰相反,Property Animator是通过改变控件内部的属性值来达到动画效果的。
由于view动画并没有改变控件的真实属性,所以会有如下三种属性:
android:fillAfter          如果设置为true,控件动画结束时,将保持动画最后时的状态
android:fillBefore       如果设置为true,控件动画结束时,还原到开始动画前的状态
android:fillEnabled     与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
而属性动画Animator,就没有这三种设置,因为控件的真实属性已经被改变了
3.属性动画中,
插值器,TimeInterpolator,它里面只有一个函数float getInterpolation(float input);
              input参数与任何我们设定的值没关系,只与时间有关,随着时间的增长,动画的进度也自然的增加,input参数就代表了当前动画的进度,它取值范围是0到1,表示当前动画的进度。而返回值则表示动画的当前数值进度 。
估值器,Evaluator其实就是一个转换器,他能把小数进度转换成对应的数值位置。
可以通过重写加速器改变数值进度来改变数值位置,也可以通过改变Evaluator中进度所对应的数值来改变数值位置。 
一般情况下,执行动画特效动作的代码通过自定义TimeInterpolator重写getInterpolation()方法,比如系统提供的 AccelerateInterpolator()、BounceInterpolator()等等,
然后自定义Evaluator时候重写evaluate()方法,evaluate()方法仅仅根据进度做简单的数值改变。
4.属性动画中
   ValueAnimator有个方法ofObject(TypeEvaluator evaluator, Object... values);  与ObjectAnimator是不同的两个类。

你可能感兴趣的:(技术分享)