接触了很多的view ,但对它是如何被画出来的一直都不是很清新
今天好好找了下资料,总结一下:
android中的view是放在window上的,但window只是起到一些公共特性的抽象范畴
window下面的根view才是接受主要功能的部分,包括如何布局,画图,事件的分发等
而各个根view又被放到windowmanager里面进行管理,
windowmanager主要管理各个窗口的显示,隐藏等而各个窗口的布局,画图,事件的分发,
windowmanager只是发给各个根view,让他们自己分发管理自己的子控件等
而画图就是由各个view以及他们的父layout来控制的,
但画图可不是简单的分发,管理,他需要硬件来支持显示到屏幕上,它需要内存来不断的移动这些数据
而这些操作又是怎么个流程的呢!
我们在自定义view的时候经常用到ondraw()这个回调方法,在这里只需在canvas参数上用画笔,来画就行了
我们完全不需要知道他是怎么被放到屏幕上得,以及何时被放到屏幕上得,
先看看如何被放到屏幕上得,
其实画图的时候是现需要分配内存来存储这些画图数据的,
android是通过共享内存的方式来管理这些数据的存储和访问的,用surfacefling来封装管理这个区域,
而每个surface都对应自己的graphicbuffer来缓存数据然后最终通过surfacefling来显示到屏幕上
surface就是一块区域的意思,我们要向画图时必须锁定一块surface(存储区域) 然后获得canvas,接着操作!
我们也可以直接操作canvas来作图,因为canvas其实是封装的ska图形库来作图的,它里面也是有存储区域的,不过要想显示出来
还是得需要surfacefling来处理
比如如果不是在ondraw()里画图 而是在其他地方 new一个canvas
然后 作图 最后通过 imageview。setimagebitmap或者 view。setbackgroundrable来显示
应该就是这种情况了!
算是有了个系统的认识了!错了再改就是!
画个图吧:
先空着吧!以后有时间了再加上!csdn是允许以后编辑的!哬