編輯:Android開發教程
Android中的本地窗口FramebufferNativewindow
1.1 Android中的本地窗口
在OpenGL的學習過程中,我們不斷提及“本地窗口”(NativeWindow)這一概念。那麼對於Android系統來說,它是如何將OpenGL ES本地化的呢,或者說,它提供了什麼樣的本地窗口?
根據整個Android系統的GUI設計理念,我們不難猜想到至少需要兩種本地窗口:
面向管理者(SurfaceFlinger)
既然SurfaceFlinger扮演了系統中所有UI界面的管理者,那麼它無可厚非地需要直接或間接地持有“本地窗口”。從前一小節我們已經知道,這個窗口就是FramebufferNativeWindow
面向應用程序
我們先給出答案,這類窗口是SurfaceTextureClient
有不少讀者可能會覺得困惑,為什麼需要兩種窗口,同一個系統不是應該只有一種窗口嗎?比如這樣子:
圖 11?4理想的窗口系統
這個圖中,由Window來管理Framebuffer。我們打個比方來說,OpenGL就像是一台通用的打印機一樣,只要輸入正確的指令,它就能按照要求輸出結果;而Window則是“紙”,它是用來承載OpenGL的輸出結果的。OpenGL並不介意Window是A4紙或者是A6,甚至是塑料紙也沒有關系,對它來說都只是“本地窗口”。
理解了這個圖後,我們再來思考下,這樣的模型是否能符合Android的要求?假如整個系統僅有一個需要顯示UI的程序,我們有理由相信它是可以勝任的。但是如果有N個UI程序的情況呢?Framebuffer顯然只有一個,不可能讓各個應用程序自己單獨管理。
這樣子問題就來了,該如何改進呢?下面這個方法如何?
圖 11?5 改進的窗口系統
使用AbsoluteLayout,可以指定它其中的子View的確切位置。觀察如下main.xml中的代碼:<?xml version="1.0"
技術是永無止境的,如果真的愛技術,那就勇敢的堅持下去。我很喜歡這句話,當我在遇到問題的時候、當我覺得代碼枯燥的時候,我就會問自己,到底是不是真的熱愛技術,這個時候,我心裡
Android手機都會有返回鍵,不管是實體鍵,還是虛擬鍵。Android用戶主要也都是通過這個返回鍵操控頁面返回方式的,不比IOS逼格甚高的只保留一個操作鍵。這種方式是最
AndroidGraphics2DTutorial定義了應用的主Activity,下面就可以開始寫每個具體的二維繪圖示例。不同的例子將盡量采用 不同的UI控件:Menu,