Surfaceview 初步講解及其打洞概述

surfaceview集成view,但是有獨立的繪圖表面,surface,surfacecontroller。先上代碼

 

我們知道,每一個view都有數據自己的繪圖層級,activity創建的時候,就會創建phonewindow,其中activity的view都在一個層級層級上繪製,並且跟隨vsync信號進行刷新(具體不細說)。

然而surfaceview的刷新控制,雖然是view,但是不再基於vsync信號,而是基於具體控制的播放器。draw和dispatchdraw並沒有做任何明顯的繪製,當然也就存在了無法進行屬性動畫的問題,因爲他內容的刷新已經與其他view不同。

至於說到打洞問題,

我們知道,view的繪製是先繪製底層view,通過dispatchdraw進行分發子view繪製,在surfaceview中,會判斷出自身繪製的區域,然後將目前的區域 弄成 透明。(也就是說,凡是在他下面先繪製的view都無法顯示了,在他上面的view,依然可以顯示)。