2014/09/01

Android Canvas

畫圖到 Canvas 上基本有兩種做法

1. 與 UI Activity 在同一個 Thread ,呼叫 invalidate(0 重製,然後實做 onDraw() 回呼來處理。
2. 在另外一個 Thread 上,你管理 SurfaceView 來繪製 Canvas

創建一個 Canvas 一定需要定義一個 Bitmap

Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
SurfaceView 由於是由另外一個 Thread 繪圖,所以不需要等待其它的 View 就能畫。
使用方法就是建立一個 extends SurfaceView 的類別,該類別也必須要實做 SurfaceHolder.Callback 子類別,該子類別是用來通知 surface 發生 create, change, destroy 事件。
操作 Surface 物件必須要透過 SurfaceHolder,所以當你初始化了 SurfaceView 物件,要透過 getHolder() 方法來取得 SurfaceHolder ,然後再透過 SurfaceHolder.Callback 的 addCallback() 方法來註冊通知。

透過 lockCanvas() 跟 unlockCanvasAndPost() 來達到繪圖效果

OpenGL ES

  • OpenGL ES 1.0 and 1.1 - This API specification is supported by Android 1.0 and higher.
  • OpenGL ES 2.0 - This API specification is supported by Android 2.2 (API level 8) and higher.
  • OpenGL ES 3.0 - This API specification is supported by Android 4.3 (API level 18) and higher.
ES 3.0 需要硬體廠商有實做 graphics pipeline, 而且 Android 4.3 以上的裝置可能不能用...= =

Android 支援 OpenGL ,可透過一般的 API 存取外,也可以透過 NDK (Native Development Kit)。

一般存取方法是透過 GLSurfaceView 跟 GLSurfaceView.Renderer 這兩個類別。
GLSurfaceView 這個類別讓你可以使用 OpenGL API 繪製跟操作物件(藉由建立這個類別物件並加上 Renderer)。

GLSurfaceView.Renderer 是一個讓你必須要實做 onSurfaceCreated(), onDrawFrame(), onSurfaceChanged() 方法的介面


No comments:

Post a Comment