2012-05-17 48 views
4

我正在學習Suface,Suface Flinger,SurfaceView,SurfaceHolder和Bitmap的文檔。我發現了以下定義:Surface Flinger,SurfaceView,Surface,SurfaceHolder和Bitmap是Android

表面 表面是像素的集合。 Surface是一個保存正在合成到屏幕的像素的對象。您在屏幕上看到的每個窗口(對話框,全屏幕活動,狀態欄)都有自己的表面,Surface Flinger會以正確的Z順序將其渲染到最終顯示屏。一個表面通常具有多於一個的緩衝區(通常爲兩個)來執行雙緩衝渲染:應用程序可以繪製其下一個UI狀態,而表面拋擲物使用最後一個緩衝區合成屏幕,而無需等待應用程序完成畫畫。

SurfaceView 此類用於呈現實況相機預覽給用戶。 一個SurfaceView是一種特殊的實現認爲還創建了自己的專用表面爲應用程序直接拉進(普通視圖層次結構,否則必須共享單面的窗口之外)

位圖 位圖是用於像素集合的包裝,它僅僅是一個具有其他一些便利功能的像素數組。

帆布 畫布是一個包含所有繪圖方法的類。它類似於Java中的AWT/Swing中的Graphics類。它具有關於如何繪製,框等的所有邏輯。畫布在位圖上運行。

但我根據上述定義位圖不清楚SurfaceHolderSurfaceFlinger的,也是像素的容器和表面了。

你能幫助我清楚地理解所有這些對象的定義嗎?

回答

2

畫布是使用圖形API進行繪圖的基本上下文。你可以創建你自己的Canvas來包裝一個位圖來做屏外繪圖,當然UI框架會將Canvases傳遞給小部件讓他們自己進入。所有這些小部件都是View的子類。或者,如果它們可以包含其他小部件,則它們從ViewGroup(它是View的子類)中繼承。

如果你想做高幀率的動畫,那麼你需要從SurfaceView子類(或其子類GLSurfaceView,如果你想做屏幕上的OpenGL-ES渲染)。每個SurfaceView都有一個SurfaceHolder,它具有lockCanvas方法,您可以隨時調用該方法來獲取Canvas,以便繪製更新後的顯示併發回給用戶,以便立即通過unlockCanvasAndPost查看。

欲瞭解更多信息,請參閱2D graphics conceptsCustom widget tips