Android全屏繪製 Surface的使用

這個是爲實現全屏手寫輸入準備的。

Android平臺自身提供了一個底層的顯示接口-FLINGER服務,通過這個接口,我們可以實現創建一個新的顯示區域來繪製想要的顯示內容,並和原有的屏幕輸出混合輸出到屏幕上。

要在普通應用裏使用這個接口,
1、必須指定在AndroidManifest.xml裏指定android.permission.ACCESS_SURFACE_FLINGER權限,添加:
<uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" />

2、用系統KEY來簽名包,在Android.mk裏寫上:
LOCAL_CERTIFICATE := platform

然後就可在應用裏使用FLINGER服務了,實例片段如下:



  1. mSurfaceSession = new SurfaceSession(); //連接到FLINGER服務  
  2. try {  
  3.            //創建一個Surface,並在上面繪製  
  4.     mSurface = new Surface(mSurfaceSession,   
  5.             Process.myPid(),   
  6.             Display.DEFAULT_DISPLAY,   
  7.             240, 320,   
  8.             PixelFormat.TRANSPARENT,  
  9.             0);  
  10.        //通過剛創建的Surface裏獲取一個Canvas,通過這個接口來繪製  
  11.     Canvas canvas = mSurface.lockCanvas(null);  
  12.       
  13.     canvas.drawColor(0x0);  
  14.     Paint p = new Paint();  
  15.       
  16.     p.setColor(Color.RED);  
  17.     canvas.drawLine(0, 0, 240, 320, p);  
  18.     canvas.drawLine(240, 0, 0, 320, p);  
  19.     //提交更新,讓新的內容輸出到屏幕  
  20.     mSurface.unlockCanvasAndPost(canvas);  
  21.       
  22.     mSurface.openTransaction();  
  23.       
  24.     //mSurface.setPosition(0, 0);  
  25.     //mSurface.setSize(240, 320);  
  26.        //讓這個Surface顯示到最上層  
  27.     mSurface.setLayer(99999);  
  28.     mSurface.show();  
  29.     mSurface.closeTransaction();  
  30. }   
  31. catch (OutOfResourcesException e)  
  32. {  
  33.     Log.e(TAG, e.toString());  






通過SurfaceSession, 我們可以創建多個Surface, Surface之間的混合是由FLINGER服務直接完成的, 使用者不需要關心, 直接在繪製即可。

如果內核支持多層, 通過打開/dev/fbX來直接寫屏,應該可以實現相同的效果, 不過貌似用官方接口正規一些。

沒圖沒真相,上示例的圖


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章