# Surface&Canvas
Canvas為在畫布的意思。Android上層的作圖幾乎都通過Canvas實例來完成,其實Canvas更多是一種接口的包裝。drawPaints ,drawPoints,drawRect,drawBitmap ...
[
](http://hi.csdn.net/attachment/201006/14/0_1276524262qcXC.gif)
### 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操作:
[](http://hi.csdn.net/attachment/201006/14/0_1276524263FdtA.gif)[](http://hi.csdn.net/attachment/201006/14/0_1276524264rrrr.gif)
GraphicBuffer :lock
getBufferMapper().lock GraphicBufferMapper ::lock
mAllocMod->lockgralloc_module_t::lock
通過SurfaceLock可取得Surface(mLockedBuffe)所對應的圖形緩沖區地址。
(1) 建立與SkCanvas連接的位圖設備,而該位圖使用上面取得的圖形緩沖區地址做自己的位圖內存。
(2) 設置SkCanvas的作圖目標設備為該位圖。
通過該過程就建立起了SurfaceControl與Canvas之間的聯系。
[](http://hi.csdn.net/attachment/201006/14/0_1276524266rhNg.gif)[](http://hi.csdn.net/attachment/201006/14/0_1276524267jPRF.gif)
### 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);
~~~
- 前言
- (一)分析方法論探討之設計意圖
- (二)方法論探討之概念空間篇
- (三)手機之硬件形態
- (四)手機的軟件形態
- (五)基本空間劃分
- (六)IPC框架分析 Binder,Service,Service manager
- (七)Service深入分析
- (八)Android 啟動過程詳解
- (九)Zygote Service
- (十)Android GWES之基本原理篇
- (十一)Android GWES之消息系統
- (十二)Android GEWS窗口管理之基本架構原理
- (十三)Android GWES之Android窗口管理
- (十四)Android GWES之輸入系統
- (十五)Android輸入系統之輸入路徑詳解
- (十六)Android電話系統-概述篇
- (十七)電話系統之rilD
- (十八)Android電話系統之RIL-Java
- (十九)電話系統之GSMCallTacker
- (二十)Android應用程序框架之無邊界設計意圖
- (二十一)Android應用框架之AndroidApplication
- (二十二)Android應用框架之Activity
- (二十三)Andoird GDI之基本原理及其總體框架
- (二十四)Android GDI之顯示緩沖管理
- (二十五)Android GDI之共享緩沖區機制
- (二十六)Android GDI之SurfaceFlinger
- (二十七)Android GDI 之SurfaceFlinger之動態結構示意圖
- (二十八)Android GDI之Surface&Canvas