Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 全屏手寫輸入的筆跡獲取

全屏手寫輸入的筆跡獲取

編輯:Android開發實例

  Android系統中,目前沒有一個接口可以讓應用隨時獲取Touch事件,而這個功能恰恰是全屏手寫中很重要的一個部分。 手寫輸入的實現主要分為3個部分:

  1、筆畫的獲取

  2、筆畫的繪制

  3、筆畫的識別

  在以往broncho項目中,根據平時的交流和對WM的粗略接觸,以往全屏手寫的筆畫獲取都是在WM裡處理來實現筆畫數據獲取的。這一次在android系統上實現全屏手寫,稍微改變了一下思路:

  1、WM提供一個touch事件發送接口,讓應用可以注冊一個touch事件監聽。事件監聽函數返回true,WM不再處理這個事件,返回false,WM繼續分發這個事件。

  2、WM提供一個touch事件發送接口,讓應用可以模擬發送touch事件。

  3、修改WM事件分發函數,在分發touch事件到應用前,先調用事件監聽函數。發送touch事件的接口可以直接調用WM的接口。

  4、WM就做了這些修改,筆畫的獲取處理放到了全屏手寫輸入法中。

 根據今天(2009年6月26日)在硬件上的調試結果,這個思路還是靈活的,對筆畫事件獲取的處理不再需要修改WM,直接修改全屏手寫應用,然後安裝即可。

  目前的測試結果是筆畫的獲取還有不足,如多余的MOVE事件沒有過濾(多余的MOVE事件就是沒有收到DOWN事件時收到了MOVE事件);在模擬器上鼠標點擊和實際手指觸碰是完全不同的處理的,導致無法點擊按鈕。

修改的文件和要點:

添加和實現兩個接口

void setGlobalPointerEventListener(IWindow window);
boolean injectGlobalPointerEvent(in MotionEvent event, boolean             sync);

frameworks/base/core/java/android/view/IWindowSession.aidl

frameworks/base/services/java/com/android/server/WindowManagerService.java

添加接口

boolean dispatchGlobalPointer(in MotionEvent event, long                   eventTime);
frameworks/base/core/java/android/view/IWindow.aidl

添加接口引用
frameworks/base/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java

修改接口實現
frameworks/base/core/java/android/view/ViewRoot.java
frameworks/base/core/java/android/view/SurfaceView.java

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved