Android在應用中直接使用surface的場景不多見,一般我們使用SurfaceView,通過SurfaceView.SurfaceHolder.getSurface來間接得到Surface。這條路徑比較長。首先必須有SurfaceView,SurfaceView必須添加到窗口上才會顯示,並得到SurfaceHolder的回調。有沒有更快捷的方法得到一個可顯示的surface?答案是肯定的。
Step1: 創建SurfaceSession,建立和surfaceflinger的connection
SurfaceSession sess = new SurfaceSession();
看起實現,實際是創建了一個nativeobject:SurfaceComposerClient* client = new SurfaceComposerClient();
Step2:創建SurfaceControl
SurfaceControl surfControl = new SurfaceControl(sess,"test”, width, height, PixelFormat.TRANSLUCENT, SurfaceControl.HIDDEN);
Step3: 創建Surface
Surface sur = new Surface();
sur.copyFrom(surfControl);
到了這一步,這個surface就創建成功了,可以提供給任何需要surface的接口,因為它已經和surfaceflinger建立了正確的連接和初始化,可以分配buffer了。