WEB开发网
开发学院手机开发Android 开发 Android多点触摸的实现 阅读

Android多点触摸的实现

 2010-09-10 00:51:00 来源:WEB开发网   
核心提示:+ MotionEvent.SAMPLE_PRESSURE] = ev.value;} else if (ev.scancode == RawInputEvent.ABS_TOOL_WIDTH) {di.mAbs.changed = true;di.curTouchVals[MotionEvent.SAMPLE_SIZ

+ MotionEvent.SAMPLE_PRESSURE] = ev.value;

} else if (ev.scancode == RawInputEvent.ABS_TOOL_WIDTH) {

di.mAbs.changed = true;

di.curTouchVals[MotionEvent.SAMPLE_SIZE] = ev.value;

di.curTouchVals[MotionEvent.NUM_SAMPLE_DATA

+ MotionEvent.SAMPLE_SIZE] = ev.value;

}

…………………………………………… .}

/* 下面是关键的同步处理方法 */

if (ev.type == RawInputEvent.EV_SYN

&& ev.scancode == RawInputEvent.SYN_MT_REPORT

&& di.mAbs != null) {

/* 在这里实现了对 SYN_MT_REPORT 事件的处理,

* 改变了 di.mAbs.mAddingPointerOffset 的值,从而将

* 新增的点的参数保存到下一组偏移量的位置。

*/

…………………… .

final int newOffset = (num <= InputDevice.MAX_POINTERS)

? (num * MotionEvent.NUM_SAMPLE_DATA)

: (InputDevice.MAX_POINTERS *

MotionEvent.NUM_SAMPLE_DATA);

di.mAbs.mAddingPointerOffset = newOffset;

di.mAbs.mNextData[newOffset

+ MotionEvent.SAMPLE_PRESSURE] = 0;

}

……………… .

} else if (send || (ev.type == RawInputEvent.EV_SYN

&& ev.scancode == RawInputEvent.SYN_REPORT)) {

/* 这里实现了对 SYN_REPORT 事件的处理

* 如果是单点触摸屏,即使用 di.curTouchVals 数组保存的点

* 转化为多点触摸屏的 mNextData 数组保存

* 最后是调用 InputDevice 中的 generateAbsMotion 处理这个数组。这个函数

* 的具体实现方法将在后面补充

*/

………………………… ..

ms.finish(); //重置所有点和偏移量

…………………… ..

}

由于上层的代码仍然使用ABS_X, ABS_Y 这些事件,为了使多点触摸屏代码有良好的兼容性,在 KeyInputQueue.java 的最后,我们将多点事件类型转化为单点事件类型,返回一个新的 InputDevice:

private InputDevice newInputDevice(int deviceId) {

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Android 多点 触摸

编辑录入:coldstar [复制链接] [打 印]
赞助商链接