当前位置: 首页 > news >正文

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, 鼠标样式由箭头变成小手

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【MindSpore学习打卡】应用实践-LLM原理和实践-基于MindSpore实现BERT对话情绪识别
  • 【机器学习】独立成分分析(ICA):解锁信号的隐秘面纱
  • 道路运输企业管理人员安全考核试题(附答案)
  • 如何在工作中开悟?
  • element 如何实现文件上传下载导出
  • 基于QT开发的反射内存小工具
  • OWASP ZAP
  • 低代码研发项目管理流程优化:提效与创新的双重驱动
  • 【Unity2D 2022:UI】制作主菜单
  • 昇思25天学习打卡营第1天|初步了解
  • [Linux][Shell][Shell函数]详细讲解
  • Qt 统计图编程
  • Apache Seata分布式事务启用Nacos做配置中心
  • 禅道二次开发——禅道zentaoPHP框架扩展机制——对视图层(view)扩展
  • Linux账号和权限管理详解
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • flutter的key在widget list的作用以及必要性
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Linux快速复制或删除大量小文件
  • Making An Indicator With Pure CSS
  • node学习系列之简单文件上传
  • python 装饰器(一)
  • Sublime Text 2/3 绑定Eclipse快捷键
  • text-decoration与color属性
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 对超线程几个不同角度的解释
  • 工作中总结前端开发流程--vue项目
  • 你不可错过的前端面试题(一)
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 《码出高效》学习笔记与书中错误记录
  • 第二十章:异步和文件I/O.(二十三)
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​第20课 在Android Native开发中加入新的C++类
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • ######## golang各章节终篇索引 ########
  • (4.10~4.16)
  • (二十三)Flask之高频面试点
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (理论篇)httpmoudle和httphandler一览
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)理解angular中的module和injector,即依赖注入
  • (十八)三元表达式和列表解析
  • (十六)一篇文章学会Java的常用API
  • (转)Windows2003安全设置/维护
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET 分布式技术比较
  • .NET 回调、接口回调、 委托
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)