android input命令支持多指触摸成果展示-千里马framework实战开发

android4.0触摸屏(touchscreen)以及屏幕按键驱动解析 本人用的触摸屏IC是FocalTech公司的ft5306,是一款i2c的电容屏多点触控芯片。对于它的整体驱动官方已经给了,我们就触摸屏和按键部分的代码做相关说明。说明其中应该注意的地方。 阅读详情

hi

input命令扩展提示部分

generic_x86_64:/ # input -h                                                                                                      
Error: Unknown command: -h
Usage: input [<source>] <command> [<arg>...]

The sources are: 
      dpad
      keyboard
      mouse
      touchpad
      gamepad
      touchnavigation
      joystick
      touchscreen
      stylus
      trackball

The commands and default sources are:
      text <string> (Default: touchscreen)
      keyevent [--longpress] <key code number or name> ... (Default: keyboard)
      tap <x> <y> (Default: touchscreen)
      mutiple-tap pointId <x> <y> .....(Default: touchscreen)
      mutiple-touch action pointId <x> <y> ...... (action should be one of down,move,up;Default: touchscreen)
      swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
      draganddrop <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
      press (Default: trackball)
      roll <dx> <dy> (Default: trackball)

input帮助文案中额外添加了2个命令: mutiple-tap 和 mutiple-touch

mutiple-tap

mutiple-tap pointId …(Default: touchscreen)
代表多个手指的点击事件,其实就是motionevent有down和up两个事件成对,即类似click,有一个按下和抬起
使用规则参数多了一个pointId代表手指,一般从0开始。

mutiple-tap 操作如下:
在这里插入图片描述
在这里插入图片描述

日志打印如下:


dispatchTouchEvent ev = MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=200.0, y[0]=200.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=14469497, downTime=14469497, deviceId=0, source=0x1002 }
dispatchTouchEvent ev = MotionEvent { action=ACTION_POINTER_DOWN(1), actionButton=0, id[0]=0, x[0]=200.0, y[0]=200.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=210.0, y[1]=210.0, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=0, eventTime=14469498, downTime=14469498, deviceId=0, source=0x1002 }
dispatchTouchEvent ev = MotionEvent { action=ACTION_POINTER_UP(0), actionButton=0, id[0]=0, x[0]=200.0, y[0]=200.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=210.0, y[1]=210.0, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=0, eventTime=14469498, downTime=14469498, deviceId=0, source=0x1002 }
dispatchTouchEvent ev = MotionEvent { action=ACTION_UP, actionButton=0, id[0]=1, x[0]=210.0, y[0]=210.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=14469499, downTime=14469499, deviceId=0, source=0x1002 }


看可以看到app接受到的多指事件也是正常的
第一个手指 down
– 》第二个手指 ACTION_POINTER_DOWN(1)
–》第一个手指抬起ACTION_POINTER_UP(0)
–》第二个手指抬起ACTION_UP

mutiple-touch

mutiple-touch action pointId … (action should be one of down,move,up;Default: touchscreen)

仅仅代表触摸事件,它没有和tap一样有一个down和up成对,它只有一个action,而且这个action还是需要用户指定的,是down,move,up中的一个,一般都需要严格按照规则:
事件先有down,再有move,最后有up的顺序。
使用规则参数相比上面tap额外多了一个action,它来指定当前触摸具体action类型
命令如下:
input mutiple-touch down 0 200 200 1 210 210
在这里插入图片描述按下后其实一直是down状态,会等待up
输入down:
generic_x86_64:/ # input mutiple-touch down 0 200 200 1 210 210
在这里插入图片描述

输入move:
generic_x86_64:/ # input mutiple-touch move 0 220 220 1 230 230
在这里插入图片描述
输入up:
generic_x86_64:/ # input mutiple-touch up 0 220 220 1 230 230

在这里插入图片描述

相关日志:


dispatchTouchEvent ev = MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=200.0, y[0]=200.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=19712743, downTime=19712743, deviceId=0, source=0x1002 }
dispatchTouchEvent ev = MotionEvent { action=ACTION_POINTER_DOWN(1), actionButton=0, id[0]=0, x[0]=200.0, y[0]=200.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=210.0, y[1]=210.0, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=0, eventTime=19712745, downTime=19712745, deviceId=0, source=0x1002 }
dispatchTouchEvent ev = MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=220.0, y[0]=220.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=230.0, y[1]=230.0, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=0, eventTime=19720967, downTime=19720967, deviceId=0, source=0x1002 }
 dispatchTouchEvent ev = MotionEvent { action=ACTION_POINTER_UP(0), actionButton=0, id[0]=0, x[0]=220.0, y[0]=220.0, toolType[0]=TOOL_TYPE_FINGER, id[1]=1, x[1]=230.0, y[1]=230.0, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2, historySize=0, eventTime=19724517, downTime=19724517, deviceId=0, source=0x1002 }
dispatchTouchEvent ev = MotionEvent { action=ACTION_UP, actionButton=0, id[0]=1, x[0]=230.0, y[0]=230.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=19724518, downTime=19724518, deviceId=0, source=0x1002 }

日志也展示多指的Down --》 Move—》UP

更多framework干货请关注“千里马学框架”

Android触摸事件拦截:动态禁用InputFilter实现 在Android系统开发中,输入事件处理是Framework层的核心机制之一。通过InputManagerService构建的输入子系统,系统能够将硬件产生的原始事件转换为标准输入事件并分发给应用。其中InputReader作为事件翻译的关键组件,运行在独立线程中处理原始输入数据。这种架构设计不仅保证了输入响应的实时性,也为开发者提供了事件拦截的技术可能性。在实际工程中,动态控制触摸输入的需求常见于系统升级保护、演示模式锁定等场景。通过反射机制注入自定义InputFilter的方案,可以在不修改系统源码的情 阅读详情

相关推荐

Android Framework车载双屏互动:从架构设计到车规级实现

在智能座舱与物联网领域,设备间的无缝协同已成为核心体验。其技术原理通常基于分布式系统架构,通过中间件实现异构设备间的发现、连接与数据同步,从而将计算与显示能力解耦并重组。这一技术的核心价值在于打破硬件边界,实现资源(如算力、屏幕、传感器)的高效共享与体验的连续性。典型的应用场景包括跨设备应用流转、多屏协同办公以及本文聚焦的智能座舱双屏互动。在车载环境下,该技术面临高可靠性、低延迟与严苛安全性的独特挑战。以Android Framework为基础进行深度定制,构建包含虚拟显示管理、输入事件注入与低延迟编解码传

weixin_30448603的博客 527

安卓--多指触控

安卓多指触控涉及的触摸事件就只有四个:ACTION_DOWN、ACTION_POINTER_DOWN、ACTION_UP、ACTION_POINTER_UP。过程:手指1 down →手指2 down →手指3 down → 手指3 up → 手指2 up →手指1 up。知道上面这些,就靠你自己发挥了,重点是,要记录x,y和善用随后一个才会出现的ACTION_UP。可以看到,第一个下去的才会触发ACTION_DOWN,最后一个起来才会触发ACTION_UP。动作的**下标**index。

m0_72429728的博客 1114

Android Framework学习路线:从Binder到SystemServer的系统进阶指南

Android系统架构中,应用层与底层之间的桥梁是Framework,它承载着跨进程通信、消息驱动与系统服务调度等关键机制。其中,Binder作为Android核心IPC通信骨架,依靠mmap实现一次拷贝,为应用与系统服务的高效交互提供基础;Handler消息循环则保障了单线程模型下任务的有序执行,是主线程稳定运行的根基。理解这些原理,不仅有助于优化应用性能,更是掌握系统定制与问题定位的前提。从应用启动到视图绘制,从触摸事件分发到画面合成,Framework贯穿始终。本文将结合实际工程视角,系统梳理从Bin

weixin_34209851的博客 352

android input命令模拟事件以及事件注入实现

在坐标(500,100)的位置模拟点击事件参数解析:int inputSource:表示模拟事件的类型float x, float y:表示事件坐标点int displayId:在哪个屏幕上触发事件(一般用于多屏)

yimelancholy的博客 2922

Android多点触摸实现指南

在上述代码中,我们在ACTION_DOWN或ACTION_POINTER_DOWN情况下,当触摸点的数量为2时,记录初始的触摸点之间的距离。然后,在ACTION_MOVE情况下,当触摸点的数量仍为2时,计算当前触摸点之间的距离,并将其与初始距离进行比较,从而计算出缩放比例。如果你需要处理多个触摸点之间的关系,例如实现缩放或旋转效果,你可以使用getPointerId()方法来跟踪不同的触摸点,并在后续的触摸事件中识别它们。根据缩放比例,我们可以执行相应的缩放逻辑,例如调整视图的大小或改变元素的缩放比例。

DevCyberX的博客 634

Android13 adb input 调试命令使用和源码解析

本章重点Android13 adb input 调试命令的使用和源码分析 通过命令来模拟用户在设备上的各种操作,从而进行测试、调试或其他目的。通过阅读源码来深入了解Android 13系统的输入事件管理机制。

我其实什么都不会 6813

深入理解input命令只支持单指,是否可以修改实现多指?-千里马android framework实战开发

执行完成后手机画面一般就会响应一个click事件,这里发现一般都是一个手指,一直寻找看看input命令是否可以支持多个手指通过命令同时按下操作的情况,发现并没有这种多指的触摸的命令。pointId1 x y --pointId0代表具体手指索引,可以区分不一样手指,一般0开始,x,y代表是触摸事件的坐标位置。input tap命令只是进行传递了x,y坐标值,并没有传递多指相关的任何id,所以是不支持的多指的。考虑设置一个可以多指点击命令项,暂时命名叫做multiple-tap。看看这里sendTap。

learnframework的博客 1361

GSL1680触摸驱动移植实战:从内核ko编译到Android HAL适配

电容式触摸控制器是嵌入式人机交互的核心组件,其驱动需完成坐标上报、多指识别、ESD抗扰等关键功能。GSL1680作为国产早期I²C触控芯片,不支持标准hid-multitouch协议,必须通过定制Linux内核模块(ko)、设备树(DTS)配置与Android HAL层协同实现完整输入链路。技术价值在于打通从硬件中断响应、input子系统注册,到Framework事件分发的全栈路径;典型应用于RK3288/RK3368等ARM平台的工控HMI、车载中控及教育终端。本文聚焦GSL1680驱动移植中的ko编译兼

weixin_29188043的博客 253

Android系统Input专题源码分析视频课程/千里马Framework/InputDispatcher/InputReader/模拟触摸事件

hi,亲爱粉丝朋友们: 在粉丝朋友们强烈的支持下,千里马的Android Framework实战专题系列的-- Input专题课程已经杀青,千里马依旧坚持着,基础与实战结合的宗旨,让大家切身在实战中学习framework相关知识,配合案例实战训练,来进一步巩固相关知识,减低大家学习framework的难度,也提供给大家真正的企业级别开发的framework实战案例。程序员也唯有脚踏实地去跟着千里马老师课程一步步一节节的学习,跟着课程走一遍,每一步自己也去做了,深刻理解了,有问题问老师了,自己才可以算是真正意

learnframework的博客 1948

低成本主从机械臂系统构建:6D位姿数据采集与VLA模型训练实战

本文详细介绍了如何构建低成本主从机械臂系统,实现高精度6D位姿数据采集与VLA模型训练。通过300美元级别的硬件组合,系统达到±1mm位置精度和≤0.5°姿态误差,满足Vision-Language-Action模型的多模态训练需求。文章涵盖硬件选型、数据采集技巧、模型训练实战经验,为机器人研究提供经济高效的解决方案。

r7s8t的博客 266

OpenAI Codex 科研实战:从文献整理到论文初稿的自动化流水线

在科研工作中,大量时间消耗在文献整理、数据清洗、结果反复排版等重复性任务上,而非真正的思考与创新。AI 编程代理作为一种能理解自然语言指令并直接操作文件、执行脚本的命令行工具,正逐渐改变科研工作流的组织方式。它基于云端大模型推理,本地无需 GPU,通过解析用户意图,自动完成代码生成、文件批量处理与任务拆解,将传统需要手动操作的工程过程转化为可验证、可追溯的指令执行。这类工具在学术场景中的价值尤为突出:科研人员可以将文献总结、数据预处理、统计分析与可视化出图交给代理完成,从而把精力聚焦在研究问题本身。Open

weixin_34318326的博客 458

Android Input框架梳理

Android Input框架梳理 Android input子系统框架 触摸屏驱动上传数据通过input子系统上报,在分析驱动之前,先来看一下Android Input子系统的整体框架(图1)。Android系统基于Linux内核实现,内核作为整个操作系统的核心,对下,它负责整个硬件的驱动、实现对硬件器件的控制管理;对上,它提供各种系统所需的核心功能。Android系统支持的输入设备较多,如按键、触摸屏、手柄等,面对种类繁杂的输入设备,内核通过抽象化的方式来使得各输入设备的的核心处理流程统一化,细节处理流

haofeng_ma的博客 2831

【上海大学计算机组成原理实验报告】七、程序转移机制

学习实现程序转移的硬件机制//掌握堆栈寄存器的使用//手动方式实现子程序调用转移过程//手动方式实现子程序返回转移过程//编程实现`OUT`寄存器交替显示`11`和`55`//若要求`11`和`55`各显示`50`次后停机,应该如何修改程序?//根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当`LDPC`有效时,如果此时`DUBS`上的值就是转移的目标地址,则此目标地址被打入`PC`,从而实现程序的转移;若`LDPC`为`0`是附带条件的,就形成“条件转移”。

HackerKevon的博客 2474

Android 设置20点触摸

增加Android触摸点,一般是在商显的Android大屏上有一定的需求,在普通的Android设备基本不用。首先,Android系统默认最多支持16点触摸。如果要增加有效触摸点,需要更新对应的触摸框驱动ko文件;还要再framework中进行代码适配。关于触摸框点数增加的文章,网上也有不少,但是优快云上基本都是要会员才能看,这里给大家介绍一下。

wenzhi的博客 1919

Foxglove 介绍以及入门使用教程

Foxglove 是由Foxglove 工作室开发的一套工具集,包括和等组件。跨平台支持:可以在 Windows、macOS 和 Linux 上运行。多协议兼容:支持 ROS、ROS 2、CAN 数据以及其他自定义协议。丰富的可视化功能:可以绘制点云、轨迹、激光雷达数据、IMU 数据等。实时与离线模式:既可以实时监控机器人状态,也可以加载和回放记录的数据文件。Foxglove 的 3D 视图允许你以三维方式查看机器人的运动轨迹、传感器数据和其他几何信息。你可以旋转、缩放和平移视图以获得更好的观察角度。

zolty 1万+

VSCode 配置 Claude Code 插件的 4 步安装法与 3 类常见报错解决方案

介绍 VSCode 中 Claude Code 插件的 4 步可靠安装流程与 3 类高频报错(上下文丢失、认证失败、加载卡死)的根因分析和精准修复方案,聚焦文件上下文捕获机制、请求头注入要求及缓存失效逻辑,提供可验证的命令行操作与日志定位方法。

weixin_28728443的博客 496

深入探索Android Framework:成为系统开发专家的必备资源

深入探索Android Framework:成为系统开发专家的必备资源 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在移动开发领域,Android Framework无疑是开发者们必须深入掌握的核心技术之一。为了帮助广大开发者更好地理解和应用Android Framework,我们推出了一个专注于Android系统开发和Framework学习资料的开源项目。这个项目...

gitblog_06651的博客 658

Xiaojie雷达之路---手把手教你从串口获取雷达原始数据(一)---新建工程(开始)

Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章---利用串口获取毫米波雷达中的原始数据,本系列文章将从新建工程到最后原始数据显示到PC上进行逐步介绍,这个系列的文章大约是一个4-5篇左右。本篇文章呢,主要讲的是如何新建一个毫米波雷达的工程。

XiaoJie的博客 5810

Android Framework 输入子系统 (10)Input命令解读

系列文章解读&说明: Android Framework 输入子系统 的 分析主要分为以下部分: Android Framework 输入子系统(01)核心机制 inotify和epoll Android Framework 输入子系统(02)核心机制 双向通信(socketpair+binder) Android Framework 输入子系统(03)输入系统框架 Androi...

wangdsh的博客 2417

芯擎SEC1000芯片参数详细介绍

随着龙鹰一号的不断进化和应用,未来的智能座舱将不仅仅是显示和控制的集成,更是人与车之间的一种默契和无缝交互的体现。在汽车行业迈向智能化和电动化的浪潮中,座舱已不仅仅是一个驾驶者的操作空间,而是逐渐演变为一个集娱乐、信息、控制于一体的智能交互平台。今天的汽车不仅需要强劲的动力和炫酷的外观,更需要一颗强大而智能的“心脏”来支撑复杂的座舱体验和安全驾驶需求。想象一下,未来的汽车不再仅仅是交通工具,它将成为你的移动私人管家,了解你的习惯,甚至提前预测你的需求。让我们一起走进龙鹰一号的世界,探索智能座舱的无限可能!

weixin_43199439的博客 1724

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南

通过不断实践,熟悉软件的各项功能和操作技巧,工程师可更好地应对工业自动化控制中的各种挑战,开发出高效、稳定的控制程序。项目的基本组件是构成程序的核心元素,包括:程序块(主程序 OB1、子程序和中断程序)、数据块(给 V 存储器赋初值)、系统块(硬件组态和参数设置)、符号表(用符号代替存储器地址,使程序更易理解)以及状态图表(监视、修改和强制变量状态)。下载程序时,单击工具栏上的 “下载” 按钮,在弹出的下载对话框中选择要下载的块(程序块、数据块、系统块),单击 “下载” 即可。

电工 5573

Android 中input event的分析

Android 的Input Event 子系统在framework中的来龙去脉。

learnrose的专栏 3万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android Input Framework(二)---EventHub

Android Input Framework(二)---EventHub   (2012-09-17 10:20:39) 转载▼ 标签:  杂谈 分类: android 1 EventHub 获取输入设备数据 EventHub可以看成是输入消息的集散地,因为android支持多种输入设备,而各种设备的消息类型可能

qq_17334155的专栏 674

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android TP驱动开发实战:从I2C通信到input子系统全解析

在Android系统开发中,触摸屏(TP)驱动是连接硬件与上层应用交互的基础组件,其核心涉及I2C总线通信、中断处理、input子系统事件上报等关键机制。理解设备树配置、驱动probe流程以及报点协议,能够有效解决触摸失灵、坐标错乱、休眠唤醒异常等工程问题。本文从驱动框架与硬件链路出发,结合真实调试案例,深入剖析常见坑点与优化思路,覆盖从基础原理到实践落地的完整路径,为嵌入式及系统工程师提供一套可复用的TP驱动调试方法论。

weixin_34122810的博客 278

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 深入理解input命令只支持单指,是否可以修改实现多指?-千里马android framework实战开发
下一篇: SurfaceFlinger实战dump获取单个Layer图像方案及成果展示-千里马学框架
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值