view的消息派发:
按键消息:wms首选处理home键等系统级信息,底层回调viewroot中的inputhandler的方法,然后调用viewroot的dilverkeyevent(),该函数中首先在输入法之前可以拦截处理消息,然后派发给输入法窗口(前提是输入法窗口存在),之后就派发给应用根试图了(应用的根视图是phonewindow的decorview,非应用窗口的根试图是viewgroup的实现),如果消息未处理则判断是否会引起焦点变化,到此按键消息处理完成,然后如果WMS要求则返回执行结果。
根试图内部(Decorview的dispatchkeyevent()):首先处理物理按键,然后派发到activity。
activity中:回调onUserInteraction,然后回调decorview的dispatchkeyevent。
view树和activity中都没处理,则交给phonewindow处理。
触摸消息:viewroot派发到根视图即decor,然后如果callback不为空,则调用activity的dispatchtouchevent,该方法会调用window的dispatchevent,然后调用decor父类即viewgroup的dispatchtouchevent,之后往下递归调用。如果callback为空则直接调用decor父类即viewgroup的dispatchtouchevent,然后递归调用。最上层view的dispatchtouchevent首先调用ontouchlinsiner的ontouch,然后调用view的ontouchevent,没有消耗则 返回false,上一层的ontouchevent中处理。view树中都没处理则在window中处理屏幕偏移。
绘制:
view树重新遍历原因:视图本身变化,视图内部添加删除。
view的遍历过程:
performTraversals()中的onmeasure、ondraw、onlayout函数。
ondraw绘制内容:view背景,视图本身内容,渐变边框,滚动条。
onmeasure:
onlayout
动画:布局动画在drawchild中完成、视图动画在dispatchdraw中完成。
surface是一个平面内部包含平面大小位置和屏幕内存缓冲区,应用程序可以通过surfaceview创建,canvas和paint是绘制功能类,paint设置文字的颜色大小,构造canvas对象必须指定一段内存,因为绘制的结果就是在内存中填充不同颜色值 。