Android Window/Window Z-Order/Surface/SurfaceView
window z-order概念:
window z-order 表明了重疊窗口堆中窗口的位置,這個窗口堆是按一個假想的軸定位的,
這個軸就是從屏幕向外伸展的Z軸。z-order最上面的窗口覆蓋所有其它的窗口,z-order最底層的窗口被所有其他的窗口覆蓋。
應用程序設置窗口在z-order的位置是通過把它放在一個給定的窗口的后面,或是放在窗口堆的頂部或底部。
Window:
在Activity里,Window 是一個抽象類,代表了一個矩形的不可見的容器,里面布局著若干個可視的區域(View).?
從用戶角度來看,Android是個多窗口的操作系統,不同尺寸的窗口區域根據尺寸,位置,z-order及是否透明等參數 疊加起來一起并最終呈現給用戶。這些窗口既可以是來自一個應用,也可以來自與多個應用,這些窗口既可以顯示在一個平面,也可以是不同的平面。
總而言之,窗口是有層次的顯示區域,每個窗口在底層最終體現為一個個的矩形Buffer, 這些Buffer經過計算合成為一個新的Buffer,最終交付Display系統進行顯示。
系統窗口(System Window): 系統設計的,不依附于任何應用的窗口,如下:
狀態欄(Status Bar), 導航欄(Navigation Bar), 壁紙(Wallpaper), 來電顯示窗口(Phone),
鎖屏窗口(KeyGuard), 信息提示窗口(Toast), 音量調整窗口,鼠標光標等等。
子窗口(Sub Window):比如應用自定義的對話框,或者輸入法窗口,子窗口必須依附于某個應用窗口(設置相同的token)。
surface:
在Android中,Window與Surface一一對應。 如果說Window關心的是層次和布局,是從設計者角度定義的類,Surface則從實現角度出發,是工程師關系和考慮的類。
Window的內容是變化 的,Surface需要有空間來記錄每個時刻Window的內容。在Android的SurfaceFlinger實現里,通常一個Surface有兩塊 Buffer,?
一塊用于繪畫,一塊用于顯示,兩個Buffer按照固定的頻率進行交換,從而實現Window的動態刷新。
SurfaceView:
SurfaceView本身是一個View,符合一切View的特性,需要通過Canvas畫布繪制。
SurfaceView擁有獨立的Surface(繪圖表面),即它不與其宿主窗口共享同一個Surface。
一般來說,每一個窗口在SurfaceFlinger服務中都對應有一個Layer,用來描述它的繪圖表面。對于那些具有SurfaceView的窗口來說,
每一個SurfaceView在SurfaceFlinger服務中還對應有一個獨立的Layer或者LayerBuffer,用來單獨描述它的繪圖表面,以區別于它的宿主窗口的繪圖表面。
因此SurfaceView的UI就可以在一個獨立的線程中進行繪制,可以不會占用主線程資源。
SurfaceView是用Zorder排序的,他默認在宿主Window的后面,SurfaceView通過在Window上面“挖洞”(設置透明區域)進行顯示
總結
以上是生活随笔為你收集整理的Android Window/Window Z-Order/Surface/SurfaceView的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机or笔记本,笔记本or台式机?大学
- 下一篇: android sina oauth2.