android鼠标滚轮bug

本文主要讨论了Android系统中遇到的鼠标滚轮滚动方向错误的问题,并提供了具体的解决方案:修改com/android/server/KeyInputQueue.java文件的第789行,将加号改为减号。此外,还介绍了Android系统对鼠标的原生支持原理,以及在屏幕旋转后处理鼠标坐标的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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     实现在界面上的画鼠标及移动鼠标的工作。

 

linux内核鼠标事件:mousedev.c

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值