动画深入分析(艺术探索读书笔记)
动画分类:帧动画、View动画、属性动画
View动画
继承关系只能作用在View上面的动画,我们平时常用的五个动画类都是继承自Animation这个类的
- 对于View动画来说,推荐使用xml的方式来定义动画
<set>、<translate>、<scale>、<rotate>、<alpha>
- <set>标签可以定义动画的集合,<set>标签有两个属性需要注意:
interpolator是来指定差值器的,shareInterpolator是来指定动画集合中的各个动画是否共享动画集合的差值器
自定义view动画
步骤:
1、继承Animation
2、重写initialize做一些必要的初始化工作
3、重写applyTransformation完成矩阵的变换
自定义view的关键在于对矩阵的操作,一般为了计算简单都需要借助Camera类
view 动画的特殊使用场景
1、LayoutAnimation
在res/anim下面定义动画文件,标签名称为<layoutAnimation />
一般我们是为ViewGroup指定一个LayoutAnimation,这样的话ViewGroup中的所有子view出场时都会具有这个动画效果,比如说我们可以给ListView运用LayoutAnimation,这样ListView的所有item在出场时都会有动画效果了
2、Activity切换动画
overridePendingTransition(int enterAnim, int exitAnim)
主要是在这个方法中指定进入和退出的Activity要用到的动画
- 这个方法必须位于startActivity或者finish方法之后,否则动画将不会起作用
3、Fragment动画
getSupportFragmentManager().beginTransaction().setCustomAnimations(int enter,int exit)
注意:在res/anim下面的资源文件是view动画,在res/animator下面的资源文件是属性动画
属性动画
Animator的子类属性动画可以对任意对象的属性进行动画而不仅仅是view,属性动画的父类是Animator
属性动画中的插值器和估值器
插值器的基类是TimeInterpolator,输入的值input是一个介于0和1之间的数
//input A value between 0 and 1.0
public interface TimeInterpolator {
float getInterpolation(float input);
}
估值器的基类是TypeEvaluator,参数fraction是介于0和1之间的数
public interface TypeEvaluator<T> {
public T evaluate(float fraction, T startValue, T endValue);
}
我们可以得出结论:插值器的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比,估值器的作用是根据当前属性值改变的百分比来计算出改变后的属性