Android多点触摸的实现
2010-09-10 00:51:00 来源:WEB开发网if (numPointers == 1) { //原来只有 1 个点按下,所以现在的动作是全部按键 up
action = MotionEvent.ACTION_UP;
} else { //原来有多点按下,现在是 ACTION_POINTER_UP 动作,
action = MotionEvent.ACTION_POINTER_UP
| (upOrDownPointer << MotionEvent.ACTION_POINTER_ID_SHIFT);
}
}
currentMove = null;
} else { //前后触屏 pointer 个数相同,所以是移动动作 ACTION_MOVE
action = MotionEvent.ACTION_MOVE;
}
/* 后面则是根据屏幕的 height 和 width 以及屏幕方向 orientation 对这些点进行二次处理 */
……………………………………
}
MotionEvent generateRelMotion(InputDevice device, long curTime,
long curTimeNano, int orientation, int metaState) {
/* 轨迹球等的处理方式 */
………………………………………… ..
}
void finish() { //结束这轮动作
mNextNumPointers = mAddingPointerOffset = 0;
mNextData[MotionEvent.SAMPLE_PRESSURE] = 0;
}
…………………………………… .
}
……………………………… .
……………………………………
}
第五章 接口
我们平时所看到的用2 个手指对图片放大缩小、旋转等手势都是由应用程序编写浏览器实现的。这些应用程序大多会使用 Android2.0 以上的在 MotionEvent.java 中实现的新的接口。所以,我们还需要给 MotionEvent 类补充尽量全的接口。这里可以完全参照 google 新的 android 代码。
第六章 总结
综上,在硬件支持基础上,Android1.6 如果要实现多点触摸功能,主要工作可简述为以下几个方面:
1、 驱动中,除了增加多点的事件上报方式,还要完全更改单点的事件上报方式。
2、 Android的 Frameworks 层需要修改的文件有: EventHub.cpp , RawInputEvent.java , KeyInputQueue.java , InputDevice.java , MotionEvent.java 。
3、 编写新的支持多点触摸功能的多媒体浏览器。
4、 为了代码简练,android2.0 在轨迹球和单点屏事件方式中也全使用了新的变量名,以方便多点屏事件同样能使用这些变量,所以修改时还需要注意许多细节方面。
更多精彩
赞助商链接