手写输入法实现过程中的问题

来源:互联网 发布:java视频上传 编辑:程序博客网 时间:2024/04/28 04:52

花了一个星期, 终于实现出一个简易的手写输入法。 见图

 

整个过程涉及到了一系列自己不熟悉的东西,为此走了些弯路,其中:

 

Android编译系统

手写引擎用的是汉王, 汉王整个是用汇编实现, 这里采用的编译方法是先将汉王编程静态库,再编成动态库。

Android平台简化了Makefile的编写,写编译的脚本比较容易, 其中也碰到一些问题可以看看

http://blog.csdn.net/linux_lyb/archive/2009/05/07/4156572.aspx

 

JNI(JAVA本地接口)

由于引擎非java实现, 引擎的使用只能是通过调用本地接口来完成。 JNI不复杂, 只是一开始没有接触过, 在对象的路径、名称、函数定义等基础上出现人为失误,导致调用不成功。

 

java数据类型

返回识别的结果, 我定义了2种接口, 返回jstring和jbyteArray, 其中jbyteArray的赋值一直理所当然的以为用memcpy, 结果是必须使用java提供的接口, 类似(*env).SetByteArrayRegion(result, 0, byteSize, (jbyte*)&retbuf[0]);

 

编译知识

有一个问题说出来比较丢脸, 最初在编译的过程中,一直找不到汉王引擎函数的定义,链接不成功。起初一直以为问题出在编译参数、编译器版本、汇编语法上, 忘了留意到一个细节, JNI由c++实现, 最后头文件里加上extern "C"解决。

 

下一步: 全屏手写输入的实现, 主要是:

1、Touch事件的获取

直接从窗口管理器获取或者从底层的事件服务里获取。

为了让在全屏手写的时候, 其它窗口的控件也能收到Touch事件, 必须将非手写需要的事件回送。

 

2、笔迹的绘制

直接写屏或者使用android平台已有的接口。

涉及到屏幕的更新, 笔迹的绘制和清除。

 

创建一个透明窗口来简化处理这些, 不知可行否, 都需要验证。

原创粉丝点击