现在的位置: 首页 > 综合 > 正文

android画图流程分析

2013年10月17日 ⁄ 综合 ⁄ 共 892字 ⁄ 字号 评论关闭

接触了很多的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是允许以后编辑的!哬

 

 

 

【上篇】
【下篇】

抱歉!评论已关闭.