对于这些专题的详解,专门做了一个983页的PDF版本,如下
更多完整项目下载。未完待续。源码。图文知识后续上传github。
领取完整版PDF
可以点击关于我联系我获取
Android源码相关面试专题
1、Android属性动画实现原理
工作原理 :在一定时间间隔内,通过不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果。
1)ValueAnimator
:通过不断控制值的变化(初始值->结束值),将值手动赋值给对象的属性,再不断调用View的invalidate()方法,去不断onDraw
重绘view,达到动画的效果。
主要的三种方法:
a)ValueAnimator.ofInt(int values)
:估值器是整型估值器IntEaluator
b)ValueAnimator.ofFloat(float values)
:估值器是浮点型估值器FloatEaluator
c) ValueAnimator.ofObject(ObjectEvaluator, start, end)
:将初始值以对象的形式过渡到结束值,通过操作对象实现动画效果,需要实现Interpolator
接口,自定义估值器
估值器TypeEvalutor
,设置动画如何从初始值过渡到结束值的逻辑。插值器(Interpolator
)决定值的变化模式(匀速、加速等);估值器(TypeEvalutor
)决定值的具体变化数值。
// 自定义估值器,需要实现TypeEvaluator接口
public class ObjectEvaluator implements TypeEvaluator{
// 复写evaluate(),在evaluate()里写入对象动画过渡的逻辑
@Override
public Object evaluate(float fraction, Object startValue, Object endValue) {
// 参数说明
// fraction:表示动画完成度(根据它来计算当前动画的值)
// startValue、endValue:动画的初始值和结束值
... // 写入对象动画过渡的逻辑
return value;
// 返回对象动画过渡的逻辑计算后的值
}
2)ObjectAnimator
:直接对对象的属性值进行改变操作,从而实现动画效果
ObjectAnimator
继承自ValueAnimator
类,底层的动画实现机制还是基本值的改变。它是不断控制值的变化,再不断自动赋给对象的属性,从而实现动画效果。这里的自动赋值,是通过调用对象属性的set/get方法进行自动赋值,属性动画初始值如果有就直接取,没有则调用属性的get()方法获取,当值更新变化时,通过属性的set()方法进行赋值。每次赋值都是调用view的postInvalidate()/invalidate()
方法不断刷新视图(实际调用了onDraw()
方法进行了重绘视图)。
//Object 需要操作的对象; propertyName 需要操作的对象的属性; values动画初始值&结束值,
//如果是两个值,则从a->b值过渡,如果是三值,则从a->b->c
ObjectAnimator animator = ObjectAnimator.ofFloat(Object object, String propertyName, float ...values);
如果采用ObjectAnimator
类实现动画,操作的对象的属性必须有get()和set()方法。
其他用法:
1)AnimatorSet组合动画
AnimatorSet.play(Animator anim) :播放当前动画
AnimatorSet.after(long delay) :将现有动画延迟x毫秒后执行
AnimatorSe