Android 14.0 USB鼠标右键改成返回键的功能实现

本文介绍了在Android 14.0系统中将USB鼠标右键功能修改为返回键的操作。核心在于分析InputReader.cpp和CursorButtonAccumulator.cpp的源码,通过修改getButtonState()方法来处理鼠标事件,特别是针对mBtnRight的判断。此外,还讨论了如何通过system.prop属性控制这一功能的开启和关闭。
摘要由CSDN通过智能技术生成

1.概述

在14.0系统设备rom定制化开发中,一般产品有好几个usb口,用来可以连接外设,所以USB鼠标通过usb口来控制设备也是常见的问题,
在window系统中,鼠标右键是返回键的功能,可是android原生的系统 鼠标右键不是返回键根据产品开发需要鼠标修改成右键就需要跟代码,

2.USB鼠标右键改成返回键的功能实现的核心类

    frameworks/native/services/inputflinger/reader/InputReader.cpp
    frameworks/native/services/inputflinger/reader/mapper/accumulator/CursorButtonAccumulator.cpp
    device\sprd\sharkle\sl8541e_1h10\system.prop

3.USB鼠标右键改成返回键的功能实现的核心功能分析和实现

功能分析:
在 IMS 启动并准备就绪后,输入系统就可以从设备节点源源不断的抽取输入事件,并交给事件处理者进行加工处理,即输入子系统 InputReader,
Android 设备可以同时连接多个输入设备,如:触摸屏、键盘以及鼠标等,用户在任何一个设备上的
输入都会对应产生一个中断,经由 Linux 内核的中断处理以及设备驱动转换成一个事件 Event,
并传递给用户空间的应用程序进行处理。通过上篇文章的分析我们知道 InputReader
只有一个承载其运行的线程 InputThreadImpl,而每个输入设备都有自己配套的驱动程序,
其数据接口也不尽相同
通过 Linux 内核的 input system 获取用户输入的流程简述如下࿱

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
Echarts 提供了图表实例的 `setOption` 方法中可以配置事件处理函数,通过监听鼠标事件实现拖动功能。 具体实现方法如下: 1. 创建一个全局变量 `mousedown`,用于标记鼠标是否按下,初始值为 `false`。 2. 在 `option` 中配置 `grid` 的 `containLabel` 属性为 `true`,表示网格区域包含坐标轴标签。 3. 在 `option` 中配置 `dataZoom` 组件,设置 `type` 为 `'inside'`,表示内置的数据区域缩放组件。 4. 在 `option` 中配置 `toolbox` 工具箱组件,设置 `feature` 属性中的 `dataZoom` 为 `{}`,表示数据区域缩放工具。 5. 在 `option` 中配置 `series` 的 `itemStyle` 属性的 `normal` 属性中,设置 `opacity` 属性为 `0.8`,表示图表项的透明度。 6. 在 `option` 中配置 `series` 的 `label` 属性的 `normal` 属性中,设置 `show` 属性为 `true`,表示显示图表项的标签。 7. 在 `option` 中配置 `series` 的 `emphasis` 属性的 `label` 属性中,设置 `show` 属性为 `false`,表示不显示图表项的标签。 8. 在 `option` 中配置 `series` 的 `itemStyle` 属性的 `emphasis` 属性中,设置 `opacity` 属性为 `1`,表示图表项的透明度。 9. 在 `option` 中配置 `series` 的 `markPoint` 属性,用于标记拖动区域的起始点和结束点。 10. 在 `option` 中配置 `tooltip` 组件,设置 `triggerOn` 属性为 `'mousemove'`,表示鼠标移动时触发提示框。 11. 在 `option` 中配置 `brush` 组件,用于选择图表项或拖动区域。 12. 在 `option` 中配置 `brush` 组件的 `toolbox` 属性,表示在工具箱中显示选择和清除按钮。 13. 在 `option` 中配置 `brush` 组件的 `brushLink` 属性,表示与数据区域缩放组件联动。 14. 在 `option` 中配置 `brush` 组件的 `seriesIndex` 属性,表示选择或拖动的系列索引。 15. 在 `option` 中配置 `brush` 组件的 `throttleType` 属性为 `'debounce'`,表示拖动过程中节流处理。 16. 通过监听 `mousedown`、`mousemove` 和 `mouseup` 事件实现鼠标右键的拖动功能。 具体代码实现如下: ```javascript var myChart = echarts.init(document.getElementById('myChart')); var mousedown = false; // 鼠标是否按下 var start, end; // 拖动区域的起始点和结束点 myChart.setOption({ grid: { containLabel: true }, dataZoom: { type: 'inside' }, toolbox: { feature: { dataZoom: {} } }, series: [{ type: 'scatter', data: [ [10.0, 8.04], [8.0, 6.95], [13.0, 7.58], [9.0, 8.81], [11.0, 8.33], [14.0, 9.96], [6.0, 7.24], [4.0, 4.26], [12.0, 10.84], [7.0, 4.82], [5.0, 5.68] ], itemStyle: { normal: { opacity: 0.8 }, emphasis: { opacity: 1 } }, label: { normal: { show: true }, emphasis: { show: false } }, markPoint: { symbolSize: 50, label: { formatter: function(params) { var x = params.value[0]; var y = params.value[1]; return '(' + x.toFixed(2) + ', ' + y.toFixed(2) + ')'; } }, data: [{ name: '起始点', coord: [0, 0] }, { name: '结束点', coord: [0, 0] }] } }], tooltip: { triggerOn: 'mousemove' }, brush: { toolbox: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'], brushLink: 'all', seriesIndex: 0, throttleType: 'debounce' } }); myChart.on('mousedown', function(params) { if (params.event.which === 1) { // 鼠标按下 mousedown = true; start = [params.event.offsetX, params.event.offsetY]; end = [params.event.offsetX, params.event.offsetY]; myChart.setOption({ series: [{ markPoint: { data: [{ name: '起始点', coord: myChart.convertFromPixel('grid', start) }, { name: '结束点', coord: myChart.convertFromPixel('grid', end) }] } }] }); } else if (params.event.which === 3) { // 鼠标右键按下 mousedown = false; } }); myChart.on('mousemove', function(params) { if (mousedown) { // 鼠标按下 end = [params.event.offsetX, params.event.offsetY]; myChart.setOption({ series: [{ markPoint: { data: [{ name: '起始点', coord: myChart.convertFromPixel('grid', start) }, { name: '结束点', coord: myChart.convertFromPixel('grid', end) }] } }] }); } }); myChart.on('mouseup', function(params) { if (params.event.which === 1) { // 鼠标释放 mousedown = false; end = [params.event.offsetX, params.event.offsetY]; myChart.dispatchAction({ type: 'brush', areas: [{ brushType: 'rect', coordRange: [ myChart.convertFromPixel('grid', start), myChart.convertFromPixel('grid', end) ] }] }); myChart.setOption({ series: [{ markPoint: { data: [{ name: '起始点', coord: [0, 0] }, { name: '结束点', coord: [0, 0] }] } }] }); } }); ``` 上述代码实现鼠标拖动选择区域,在选择区域内可以拖动鼠标右键进行平移,也可以使用内置的数据区域缩放组件或工具箱中的数据区域缩放工具进行缩放。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值