全屏手写输入的笔迹获取

  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

你可能感兴趣的:(android,测试,输入法)