SurfaceView, Surface, SurfaceHolder
- Surface
Handle onto a raw buffer that is being managed by the screen compositor狂票。即Surface是保存原始緩存區(qū)的句柄闺属,也就是顯示的像素?cái)?shù)據(jù) - SurfaceView
SurfaceView是視圖(View)的繼承類,這個(gè)視圖里內(nèi)嵌了一個(gè)專門用于繪制的Surface掂器。你可以控制這個(gè)Surface的格式和尺寸。Surfaceview控制這個(gè)Surface的繪制位置灭必。
surface是縱深排序(Z-ordered)的乃摹,這表明它總在自己所在窗口的后面。surfaceview提供了一個(gè)可見區(qū)域峡懈,只有在這個(gè)可見區(qū)域內(nèi) 的surface部分內(nèi)容才可見肪康,可見區(qū)域外的部分不可見。surface的排版顯示受到視圖層級關(guān)系的影響磷支,它的兄弟視圖結(jié)點(diǎn)會(huì)在頂端顯示。這意味者 surface的內(nèi)容會(huì)被它的兄弟視圖遮擋廓潜,這一特性可以用來放置遮蓋物(overlays)(例如善榛,文本和按鈕等控件)。注意悼院,如果surface上面 有透明控件咒循,那么它的每次變化都會(huì)引起框架重新計(jì)算它和頂層控件的透明效果,這會(huì)影響性能叙甸。
你可以通過SurfaceHolder接口訪問這個(gè)surface,getHolder()方法可以得到這個(gè)接口熔萧。
surfaceview變得可見時(shí),surface被創(chuàng)建遂赠;surfaceview隱藏前晌杰,surface被銷毀。這樣能節(jié)省資源肋演。如果你要查看 surface被創(chuàng)建和銷毀的時(shí)機(jī),可以重載surfaceCreated(SurfaceHolder)和 surfaceDestroyed(SurfaceHolder)蜕乡。
surfaceview的核心在于提供了兩個(gè)線程:UI線程和渲染線程梗夸。這里應(yīng)注意:
1> 所有SurfaceView和SurfaceHolder.Callback的方法都應(yīng)該在UI線程里調(diào)用,一般來說就是應(yīng)用程序主線程辛块。渲染線程所要訪問的各種變量應(yīng)該作同步處理铅碍。
2> 由于surface可能被銷毀,它只在SurfaceHolder.Callback.surfaceCreated()和 SurfaceHolder.Callback.surfaceDestroyed()之間有效尘盼,所以要確保渲染線程訪問的是合法有效的surface烦绳。 - SurfaceHolder
Abstract interface to someone holding a display surface. Allows you to control the surface size and format, edit the pixels in the surface, and monitor changes to the surface. This interface is typically available through the[SurfaceView]
class.
When using this interface from a thread different than the one running its[SurfaceView]
, you will want to carefully read the[lockCanvas()]
and[Callback.surfaceCreated]
.
SurfaceHolder是用來操作surface的接口,通過SurfaceView的getHolder來獲取
Surface午阵、SurfaceView和SurfaceHolder的關(guān)系類似MVC睹晒。Model為Surface括细;View為SurfaceView, Control為SurfaceHolder奋单。
參考https://www.android-doc.com/reference/
我的博客即將同步至騰訊云+社區(qū),邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=1rpx6oezlfsp0