bug:鼠标滚轮向前向后滚动与系统界面滚动相反
修改:
打开 frameworks/base/services/java/com/android/server/KeyInputQueue.java
修改第789行
将 di.mRel.mNextData[MotionEvent.SAMPLE_Y] += ev.value
修改为di.mRel.mNextData[MotionEvent.SAMPLE_Y] -= ev.value
其他资料
Android默认是没有鼠标支持的,但在Android系统会应用到许多其他的地方,如平板电脑、电视中,许多时候就需要鼠标的支持。
支持原理:Android中有原生的Touch事件,鼠标的各种事件都可以转换为各种Touch事件,将鼠标事件走与Touch事件相关的路径就可以实现。需要注意的是,在屏幕旋转后,鼠标的坐标等信息需要程序处理才能正确。
修改文件概览:
C++文件:
frameworks/base/include/ui/EventHub.h
frameworks/base/libs/ui/EventHub.cpp
java文件:
frameworks/base/core/java/android/view/RawInputEvent.java
frameworks/base/services/java/com/android/server/InputDevice.java
frameworks/base/services/java/com/android/server/KeyInputQueue.java
frameworks/base/services/java/com/android/server/WindowManagerService.java
文件功能描述
EventHub.h 增加鼠标设备的定义
EventHub.cpp 函数open_device(const char *deviceName)中增加鼠标类型
RawInputEvent.java 增加鼠标设备
InputDevice.java 增加鼠标连接状态标志
MotionState中增加方法 generateMouseMotion()将原始鼠标时间转化为
MotionEvent事件
KeyInputQueue.java 在事件RawInputEvent.EV_DEVICE_ADDED中判断鼠标设备,动态增加
在事件RawInputEvent.EV_DEVICE_REMOVED中,动态判断鼠标删除
在ev.type == RawInputEvent.EV_KEY中增加鼠标左中右键处理
在ev.type == RawInputEvent.EV_REL中增加鼠标坐标变动和滚轮的处理
recycleEvent()中增加鼠标相关的清理工作
WindowManagerService.java 实现在界面上的画鼠标及移动鼠标的工作。
frameworks/base/libs/ui/EventHub.cpp
java文件:
frameworks/base/core/java/android/view/RawInputEvent.java
frameworks/base/services/java/com/android/server/InputDevice.java
frameworks/base/services/java/com/android/server/KeyInputQueue.java
frameworks/base/services/java/com/android/server/WindowManagerService.java
文件功能描述
EventHub.h 增加鼠标设备的定义
EventHub.cpp 函数open_device(const char *deviceName)中增加鼠标类型
RawInputEvent.java 增加鼠标设备
InputDevice.java 增加鼠标连接状态标志
MotionState中增加方法 generateMouseMotion()将原始鼠标时间转化为
MotionEvent事件
KeyInputQueue.java 在事件RawInputEvent.EV_DEVICE_ADDED中判断鼠标设备,动态增加
在事件RawInputEvent.EV_DEVICE_REMOVED中,动态判断鼠标删除
在ev.type == RawInputEvent.EV_KEY中增加鼠标左中右键处理
在ev.type == RawInputEvent.EV_REL中增加鼠标坐标变动和滚轮的处理
recycleEvent()中增加鼠标相关的清理工作
WindowManagerService.java 实现在界面上的画鼠标及移动鼠标的工作。
linux内核鼠标事件:mousedev.c