View类包含Surface(变量名mSurface)。Surface中包含CompatibleCanvas(变量名mCanvas)。CompatibleCanvas继承至Canval(java.awt.Canval),其中包含一个矩阵对象Matrix(变量名mOrigMatrix)。矩阵Matrix就是一块内存区域,针对View的各种绘画操作都保存在此内存中。
每个Surface通常对应两个buffer,一个front buffer, 一个back buffer。其中,back buffer就是canvas绘图时对应的bitmap (研究android_view_Surface.cpp::lockCanvas)。因此,绘画总是在back buffer上,需要更新时,则将backbuffer和front buffer互换。
当用户请求绘制调用invalidate(),此函数会找到当前View或Viewgroup的ParentView,并调用父视图的invalidateChild(this, r)。invalidateChild会循环调用父视图的invalidateChildInParent()因此层层向上层视图调用,直到调用到根视图ViewRoot。ViewRoot的invalidateChildInParent调用invalidateChild,然后发送消息让ViewRoot进行绘制。绘制代码在handleMessage()中的caseDO_TRAVERSAL中调用了performTraversals()。
然后调用下一级视图的draw()函数。draw函数会依次调用以下几个函数:
附件: 2.jpg (2011-7-28 13:26:35, 38.36 KB) / 下载次数 493
附件: 1.png (2011-7-28 13:26:34, 53.86 KB) / 下载次数 482| 欢迎光临 Scripts 学盟 (http://www.iscripts.org/) | Powered by Discuz! X2 |