Pages

2011年11月15日 星期二

[Cupcake] Multi-touch Part1

  由於 Android 1.5 還沒支援多點觸控, 對於我們這種看人臉色吃飯的系統廠, 一種方式就是坐以待斃, "要等 Google 之後的版本支援才能做, 目前辦不到"。但 touch panel 明明可以支援到兩點觸控, 所以, 秉持身為 RD 的堅持, 在稍微了解相關的程式碼後, 我們只要稍微修改一下 driver 和 package, 就讓 Android 1.5 的應用程式也可以做到 multi-touch, 底下這張圖顯示底層收到的封包隔式、driver/framework在單指以及雙指的數值表現:



經過一些調整之後可以發現, 當手指頭的數量改變, status 就會出現 0->1 或 1->0 的 peak, 而 framework 就會在 finger 和 double 之間切換。raw data 欄位定義在 RawInputEvent.java, 底下用條列的方式說明:

  1. event type 分為「EV_KEY」與「EV_ABS」, EV_KEY 表示目前收到的是按鍵資料, scan code 有 BTN_TOUCH(觸控), BTN_TOOL_FINGER(單指), BTN_TOOL_DOUBLETAP(雙指)。
  2. EV_ABS 表示目前收到的是絕對坐標, scan code 有 (ABS_X, ABS_Y), (ABS_HAT0X, ABS_HAT1X, ABS_HAT0Y, ABS_HAT1Y), 前者是單指的資料, 後者是雙指的資料。
  3. 收到 EV_KEY, 不論 scan code 是 BTN_TOUCH, BTN_TOOL_FINGER, 或者BTN_TOOL_DOUBLETAP, value 都是 1。
  4. 收到 EV_ABS, 則 scan code 對應的 value 都是絕對坐標, 目前沒有支援相對坐標, 如果需要相對坐標, 可以直接在 package 自行轉換。

沒有留言:

 
Blogger Templates