Android核心分析之(28)Android GDI之Surface&Canvas
来源:互联网 发布:windows 2012 组策略 编辑:程序博客网 时间:2024/05/17 23:11
Surface&Canvas
1 Canvas与Surface之间本质关系
Canvas为在画布的意思。Android上层的作图几乎都通过Canvas实例来完成,其实Canvas更多是一种接口的包装。drawPaints ,drawPoints,drawRect,drawBitmap ...
1 Canvas与Surface之间本质关系
对于本节,我们不去研究Skia图形引擎本身,我们需要了解的我们的所做的图形到底放置到了那个地方,并且这个Canvas如何与Surface连接在一起的。
Canvas(Java)在C++Native层有一个Native Canvas的C++对象所对应。
lockCanvas()@java
Surface_lockCanvas@android_view_Surface.cpp
SurfaceControl->new Surface(control) @Surface.cpp
Surface: lock操作:
GraphicBuffer :lock
getBufferMapper().lock<-> GraphicBufferMapper ::lock
mAllocMod->lock<->gralloc_module_t::lock
通过SurfaceLock可取得Surface(mLockedBuffe)所对应的图形缓冲区地址。
(1) 建立与SkCanvas连接的位图设备,而该位图使用上面取得的图形缓冲区地址做自己的位图内存。
(2) 设置SkCanvas的作图目标设备为该位图。
通过该过程就建立起了SurfaceControl与Canvas之间的联系。
2 View:OnDraw的本源
不是使用OpenGL绘制时,Android在View属性发生变化,新建View时,或者Z-order发生变化时,需要对系统屏幕上的View重新绘制,此时我们的View会执行OnDraw(canvas),这个根源在哪里呢?
ViewRoot.Java
performTraversals(..)
…
draw()
canvas = surface.lockCanvas(dirty);
…
mView.draw(canvas);
draw(cavas)@view.java
background.draw(canvas);
onDraw(cavas)
dispatchDraw(cavas)
onDrawScrolbars(cavas)
surface.unlockCanvasAndPost(canvas);
- Android核心分析之(28)Android GDI之Surface&Canvas
- Android核心分析(28)-----Android GDI之Surface&Canvas
- Android核心分析(28)-----Android GDI之Surface&Canvas
- Android核心分析(28)-----Android GDI之Surface&Canvas
- Android核心分析(28)-----Android GDI之Surface&Canvas
- Android核心分析(28)-----Android GDI之Surface&Canvas
- Android GDI之Surface&Canvas
- Android核心分析之(26)Android GDI之SurfaceFlinger
- Android核心分析(24)-----Android GDI之显示缓冲管理
- Android核心分析(26)-----Android GDI之SurfaceFlinger
- Android核心分析(26)-----Android GDI之SurfaceFlinger
- Android核心分析(24)-----Android GDI之显示缓冲管理
- Android核心分析(26)-----Android GDI之SurfaceFlinger
- Android核心分析(26)-----Android GDI之SurfaceFlinger
- Android核心分析(26)-----Android GDI之SurfaceFlinger
- Android核心分析(26)-----Android GDI之SurfaceFlinger
- Android核心分析(26)-----Android GDI之SurfaceFlinger
- Android核心分析(26)-----Android GDI之SurfaceFlinger
- Android核心分析之(27)Android GDI 之SurfaceFlinger之动态结构...
- linux分割压缩包与解压分割后的压缩包
- MVC 3.0 (Model 验证)
- Sql Server datetime 常用日期格式转换
- 深入解析序列点
- Android核心分析之(28)Android GDI之Surface&Canvas
- wcf 部署 iis
- ubuntu下scim中文输入法安装使用
- Visible Lattice Points 欧拉函数应用
- 14条原则 (4) 把大问题划分成小问题
- T-SQL 字符串前加 N 是什么意思
- 2012 Multi-University Training Contest 9[hdu4380~4389]
- Twisted服务器优化专题
- HBase之旅四:HBase MapReduce实例分析(转自:Taobao QA Team)