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.pswp.cn/web/40773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40773.shtml
英文地址,請注明出處:http://en.pswp.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、導入依賴…