Android ViewPostImeInputStage输入事件处理

InputDispatcher向InputChannel使用socket写入输入事件,触发InputEventReceiver调用来接收输入事件。

ViewPostImeInputStage处理view控件的事件

 

@frameworks/base/core/java/android/view/InputEventReceiver.java    dispatchInputEvent
@frameworks/base/core/java/android/view/ViewRootImpl.javaonInputEvent(event);enqueueInputEvent(event, this, 0, true);if (processImmediately) { doProcessInputEvents(); }deliverInputEvent(q);  //在deliverInputEvent函数中做输入事件的实际分发stage = q.shouldSkipIme() ? mFirstPostImeInputStage : mFirstInputStage;  //这里开始选择 责任链的入口,具体请看InputStage的处理流程stage.deliver(q);  //这里主要调用InputStage的deliver方法进行分发,InputStage代表了输入事件的处理阶段,使用责任链模式设计模式。result = onProcess(q);  // EarlyPostImeInputStage::onProcessapply(q, result);if (result == FORWARD) {   forward(q);  } onDeliverToNext(q);mNext.deliver(q);result = onProcess(q);  //NativePostImeInputStage::onProcessmNext.deliver(q);result = onProcess(q); //ViewPostImeInputStage::onProcessif((source & InputDevice.SOURCE_CLASS_POINTER) != 0) { return processPointerEvent(q); }
@frameworks/base/core/java/android/view/View.javaboolean handled = mView.dispatchPointerEvent(event);//MotionEvent { action=ACTION_DOWN, actionButton=0, id[0]=0, x[0]=692.0, y[0]=993.0, toolType[0]=TOOL_TYPE_FINGER, displayId=0, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=455777, downTime=455777, deviceId=-1, source=0x5002, eventId=-701920562 }}dispatchTouchEvent(event); if (mInputEventConsistencyVerifier != null) {  mInputEventConsistencyVerifier.onTouchEvent(event, 0);    }                                                                 
@XrView.java//调用app setOnTouchListener(mTouchListener)注册的Listenerif (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && li.mOnTouchListener.onTouch(this, event)) {result = true;} return true;    //返回true表示已经处理完成,不往下走,fasle则相反if (!result && onTouchEvent(event)) { result = true;}   //调用app的onTouchEvent或者View.java的onTouchEvent//MotionEvent { action=ACTION_HOVER_MOVE, actionButton=0, id[0]=0, x[0]=664.80475, y[0]=407.85626, toolType[0]=TOOL_TYPE_MOUSE, displayId=0, buttonState=0, classification=NONE, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=284960, downTime=284790, deviceId=3, source=0x2002, eventId=1040558423 }dispatchGenericMotionEvent(event);if (action == MotionEvent.ACTION_HOVER_ENTER || action == MotionEvent.ACTION_HOVER_MOVE || action == MotionEvent.ACTION_HOVER_EXIT) { if (dispatchHoverEvent(event)) }li.mOnHoverListener.onHover(this, event))
@MyApplication/app/src/main/java/com/example/myapplication/MainActivity.javapublic boolean onHover(View view, MotionEvent motionEvent) { return false; }  //回调Button控件的onHoverdispatchGenericMotionEventInternal(event)onGenericMotionEvent(event)maybeUpdatePointerIcon(event);if (event.getActionMasked() != MotionEvent.ACTION_HOVER_EXIT) { if (!updatePointerIcon(event) && }InputManager.getInstance().setPointerIconType(pointerType);  // pointerType = 1002, 鼠标样式由箭头变成小手

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SwinTransformer的相对位置索引的原理以及源码分析

文章目录 1. 理论分析2. 完整代码 引用:参考博客链接 1. 理论分析 根据论文中提供的公式可知是在 Q Q Q和 K K K进行匹配并除以 d \sqrt d d ​ 后加上了相对位置偏执 B B B。 A t t e n t i o n ( Q , K , V ) S o f t m a x ( Q K T d B ) V \begin{aligned} &…

绝了,华为伸缩摄像头如何突破影像边界?

自华为Pura70 Ultra超聚光伸缩镜头诞生以来,备受大家的关注,听说这颗镜头打破了传统手机的摄像头体积与镜头的设计,为我们带来了不一样的拍照体验。 智能手机飞速发展的今天,影像功能已经成为我们衡量一款手机性能的重要指标。想…

MySQL中mycat与mha应用

目录 一.Mycat代理服务器 1.Mycat应用场景 2.mycat安装目录结构说明 3.Mycat的常用配置文件 4.Mycat日志 5.mycat 实现读写分离 二.MySQL高可用 1.原理过程 2.MHA软件 3.实现MHA 一.Mycat代理服务器 1.Mycat应用场景 Mycat适用的场景很丰富,以下是几个典型…

进程输入输出及终端属性学习

进程的标准输入输出 当主进程fork或exec子进程,文件描述符被继承,因此0,1,2句柄也被继承,从而使得telnet等服务,可以做到间接调用别的shell或程序。比如如果是远程登录使用的zsh,那么其会重定向到相应的pts $ ps|gre…

沪上繁花:上海电信的5G-A之跃

2024年6月18日下午,在上海举行的3GPP RAN第104次会议上,3GPP正式宣布R18标准冻结。R18是无线网络面向5G-A的第一个版本,其成功冻结正式宣布了5G发展迎来新机遇,5G-A商用已进入全新的发展阶段。 在5G-A滚滚而来的时代洪流中&#x…

C#实战|账号管理系统:通用登录窗体的实现。

哈喽,你好啊,我是雷工! 本节记录登录窗体的实现方法,比较有通用性,所有的项目登录窗体实现基本都是这个实现思路。 一通百通,以下为学习笔记。 01 登录窗体的逻辑 用户在登录窗输入账号和密码,如果输入账号和密码信息正确,点击【登录】按钮,则跳转显示主窗体,同时在固…

Vue3项目初始化:

紧接着前面的文章:https://blog.csdn.net/weixin_51416826/article/details/138679863?spm1001.2014.3001.5502 当我们生成一个Vue3项目后必须要增加一些依赖和配置,比如安装组件库、配置ESLint和Prettier、接下来咱一步步推进~ 安装组件库 一般开发…

【基础篇】1.7 C语言基础(一)

一,为什么是C语言? C语言是嵌入式系统开发领域广泛使用的编程语言。STM32作为一种嵌入式系统的微控制器,需要精确控制硬件资源,那么C语言能够满足这一需求。 二,STM32 C语言常用基础知识 下面是我们在日常STM32开发中必备的C语言基础要点,掌握这些C语言的基础知识要点…

llama3

Llama 3是由Meta公司发布的一款大型语言模型(LLM),该模型在发布后迅速引起了业界的广泛关注。以下是对Llama 3的详细介绍: 一、基本信息 发布单位:Meta公司 发布时间:当地时间2024年4月18日 主要特点&…

上海外贸建站公司wordpress模板推荐

Sora索啦高端制造业wordpress主题 红色高端制造业wordpress主题,适合外贸企业出海建独立站的wordpress模板。 https://www.jianzhanpress.com/?p5885 Yamal外贸独立站wordpress主题 绿色的亚马尔Yamal外贸独立站wordpress模板,适用于外贸公司建独立站…

Redis 中 Set 和 Zset 类型

目录 1.Set类型 1.1 Set集合 1.2 普通命令 1.3 集合操作 1.4 内部编码 1.5 使用场景 2.Zset类型 2.1 Zset有序集合 2.2 普通命令 2.3 集合间操作 2.4 内部编码 2.5 使用场景 1.Set类型 1.1 Set集合 集合类型也是保存多个字符串类型的元素,但是和列表类型不同的是&…

【Go】excelize库实现excel导入导出封装(四),导出时自定义某一列或多列的单元格样式

大家好,这里是符华~ 查看前三篇: 【Go】excelize库实现excel导入导出封装(一),自定义导出样式、隔行背景色、自适应行高、动态导出指定列、动态更改表头 【Go】excelize库实现excel导入导出封装(二&…

WY-35A4T三相电压继电器 导轨安装 约瑟JOSEF

功能简述 WY系列电压继电器是带延时功能的数字式交流电压继电器。 可用于发电机,变压器和输电线的继电保护装置中,作为过电压或欠电压闭锁的动作元件 LCD实时显示当前输入电压值 额定输入电压Un:100VAC、200VAC、400VAC产品满足电磁兼容四级标准 产品…

【Rust入门】猜数游戏

文章目录 前言Rust的变量Rust占位符读取一行数据到变量里面示例代码总结 前言 Rust是一种系统编程语言,它专注于速度、内存安全和并行性。学习Rust可以为你的编程技能库增添新的一笔。在这篇文章中,我们将通过一个简单的猜数游戏来介绍Rust的基本概念。…

VBA初学:零件成本统计之一(任务汇总)

经过前期一年多对金蝶K3生产任务流程和操作的改造和优化,现在总算可以将零件加工各个环节的成本进行归集了。 原本想写存储过程,通过直接SQL报表做到K3中去的,但财务原本就是用EXCEL,可以方便调整和保存,加上还有一部分…

便携式气象站:探索自然的智慧伙伴

在探索自然奥秘、追求科学真理的道路上,气象数据始终是我们不可或缺的指引。然而,传统的气象站往往庞大而笨重,难以在偏远地区或移动环境中灵活部署。 便携式气象站,顾名思义,是一种小巧轻便、易于携带和安装的气象观测…

模拟面试002-Java开发工程师+简历+问题+回答

模拟面试002-Java开发工程师简历问题回答 目录 模拟面试002-Java开发工程师简历问题回答面试简历面试官题问Java基础与编程框架与工具数据库与性能优化项目经验与实践团队合作与沟通 求职者回答Java基础与编程框架与工具数据库与性能优化项目经验与实践团队合作与沟通 参考资料…

由于找不到xinput1 3.dll无法继续执行重新安装程序

如果您的计算机提示无法找到xinput1_3.dll文件,这可能表明您的计算机存在问题。在这种情况下,您需要立即对xinput1_3.dll文件进行修复,否则您的某些程序将无法启动。以下是解决无法找到xinput1_3.dll文件的方法。 一、关于xinput1_3.dll文件的…

你要允许此应用对你的设备进行更改吗

在Windows 11中,当你看到提示“你要允许此应用对你的设备进行更改吗?”时,这是系统检测到某个应用或软件试图对你的设备进行更改或安装的提醒。这个提示是为了保护你的系统免受潜在恶意软件的侵害。如果你选择“是”,则应用可以继…

Elasticsearch 实现 Word、PDF,TXT 文件的全文内容提取与检索

文章目录 一、安装软件:1.通过docker安装好Es、kibana安装kibana:2.安装原文检索与分词插件:之后我们可以通过doc命令查看下载的镜像以及运行的状态:二、创建管道pipeline名称为attachment二、创建索引映射:用于存放上传文件的信息三、SpringBoot整合对于原文检索1、导入依赖…