Android觸摸事件分發關鍵點【筆記摘要】

觸摸事件分發:就是一個為了解決觸摸事件沖突而設置的機制

1.事件類型

ACTION_DOWN -> ACTION_UP / ACTION_CANCEL
ACTION_DOWN -> ACTION_MOVE -> ACTION_MOVE -> ACTION_MOVE -> ACTION_UP / ACTION_CANCEL
這個取消事件ACTION_CANCEL它是一種特殊的事件,它對應的是時間序列的非人為的提前結束

2.onTouchEvent()

在Android里面,每一個觸摸事件都會交給View的onTouchEvent()方法來處理

當用戶的手指剛剛觸摸到屏幕的時候,也就是一個事件組第一個事件DOWN發生的時候,Android會從用戶的觸摸點上離用戶最近的那個View開始,向下一個一個地去調用每一個View的onTouchEvent(),如果View的onTouchEvent()對這個Down事件沒有響應,它就會繼續向下,直到遇到第一個做出響應的View,這個向下的過程才會結束。這個時候,這個View就成為了這組事件的接收者,這個DOWN事件的后續事件都會直接發送給它,不會給它上面的View,也不會給它下面的View,直到這組事件結束,也就是UP事件或者CANCEL事件出現

View是否響應DOWN事件,其實取決于onTouchEvent()的返回值是否為true。其實只有DOWN事件的返回值需要是true,像后續事件UP或者MOVE它們的返回值是沒有影響的。但是如果要自定義,全都寫成true不是挺方便的嗎

如果想要寫自己的觸摸反饋算法,只要重寫onTouchEvent()在里面寫自己的算法,然后返回true就好了
在這里插入圖片描述

3.onInterceptTouchEvent()

它用于觸摸事件分發里面的事件攔截機制

在用戶觸摸屏幕的時候,每一個觸摸事件到達View的onTouchView()之前,Android會從整個Activity里面最底部的那個根View,向上一級一級地詢問:你要不要攔截這組事件,如果整個流程走完,所有的ViewGroup都不攔截,這個時候就會走第二個流程:onTouchEvent() 從上往下。而如果中途某個View攔截事件,那么這個事件就不會再發給它的子View,而是直接轉交給它自己的onTouchEvent()來處理,并且在這之后的這個事件組的所有后續事件就全部都會被自動攔截了,不會再交給它的子View,也不會交給它的onInterceptTouchEvent(),而是直接交給它的onTouchEvent()

ViewGroup是否攔截事件,是通過調用 ViewGroup 的 onInterceptTouchEvent() 方法來實現的,返回true表示攔截
當onInterceptTouchEvent()返回true的時候,除了完成事件接管,它還會對它的子View發送一個額外的取消事件CANCEL,通知子View恢復狀態

另外onInterceptTouchEvent()和onTouchEvent()有一點不同在于,onTouchEvent()是否要消費這組事件是需要在DOWN事件中決定的,如果在DOWN事件發過來的時候返回了false,那么以后你就跟這組事件無緣了,沒有第二次機會;而onInterceptTouchEvent()則是你在整個過程中都可以對事件流中的每個事件進行監聽,隨時可以返回true,來對事件流進行接管。

所以如果要寫一個可以滑動或者捏撐的ViewGroup,那么除了重寫onTouchEvent()來處理事件,還需要重寫onInterceptTouchEvent(),在DOWN事件的時候返回false,然后在后續事件中,在你覺得合適的時候,返回true來實現事件的攔截接管
在這里插入圖片描述

4.requestDisallowInterceptTouchEvent()

在事件過程中在子View里面,調用父View的requestDisallowInterceptTouchEvent(true),例如getParent().requestDisallowInterceptTouchEvent(true),父View在這個事件流中就不會再通過onInterceptTouchEvent()來嘗試攔截了,并且它是一個遞歸方法,它會阻止每一級父View的攔截,不過僅限于當前事件流

5.dispatchTouchEvent()

它是事件分發的總的調度方法,onTouchEvent() 和 onInterceptTouchEvent() 其實都是在dispatchTouchEvent()里面發生的,一個事件分發的過程,實質上就是從根View遞歸地調用了一次dispatchTouchEvent() 的過程


參考文章:
HenCoder 自定義 View 3-1 觸摸反饋,以及 HenCoder Plus

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42151.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42151.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42151.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hack The Box -- Blazorized

一、準備工作 端口掃描 詳細掃描 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-30 21:39 EDT Nmap scan report for 10.10.11.22 Host is up (0.26s latency).PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 80/tcp op…

Java后端開發(十三)-- Java8 stream的 orElse(null) 和 orElseGet(null)

orElse(null)表示如果一個都沒找到返回null。【orElse()中可以塞默認值。如果找不到就會返回orElse中你自己設置的默認值。】 orElseGet(null)表示如果一個都沒找到返回null。【orElseGet()中可以塞默認值。如果找不到就會返回orElseGet中你自己設置的默認值。】 區別就…

MyBatisPlus Service接口的繼承

介紹 Service接口 接口基礎了接口 IService&#xff0c;實現類實現就需要實現IService里的方法&#xff0c;但是MyBatisplus已經幫我們寫好了實現類&#xff0c;給我們的實現類繼承即可。 public interface IEmpService extends IService<Emp> { //其他業務方法.... }…

web學習筆記(八十)

目錄 1.小程序實現微信一鍵登錄 2. 小程序的授權流程 3.小程序配置vant庫 4.小程序配置分包 5.小程序配置獨立分包 6.小程序分包預下載 1.小程序實現微信一鍵登錄 要先實現小程序一鍵登錄首先我們需要給按鈕設置一個綁定事件&#xff0c;然后在綁定事件內部通過wx.login…

產品經理-工作流程及職能(6)

產品經理作為互聯網項目的主心骨&#xff0c;連接著團隊的所有成員&#xff08;開發、設計、運營、測試、市場等&#xff09; 用合理的產品規劃和清晰的產品愿景帶領大家前進&#xff0c;通過滿足用戶需求來創造屬于自己的商業利益。 在通常情況下&#xff0c;PM需要對整個產品…

大數據前沿技術分享——數據編織:現代數據管理的革命性方法

一、什么是數據編織&#xff1f; 數據編織&#xff08;Data Fabric&#xff09;是一種現代數據管理架構&#xff0c;旨在通過集成、管理和提供數據訪問來簡化復雜的數據環境。它利用自動化和智能技術&#xff0c;如機器學習和人工智能&#xff0c;來實現數據的無縫連接和統一視…

Yarn: 現代化的JavaScript包管理器

在JavaScript開發的世界里&#xff0c;包管理器是開發者不可或缺的工具。Yarn&#xff0c;由Facebook創建&#xff0c;是一個快速、可靠且安全的依賴管理工具&#xff0c;它為JavaScript應用程序提供了一個更高效的方式來處理包的安裝、更新和版本控制。本文將介紹Yarn的基本用…

刷題Day44|188.買賣股票的最佳時機IV、309.最佳買賣股票時機含冷凍期、714.買賣股票的最佳時機含手續費

188.買賣股票的最佳時機IV 188. 買賣股票的最佳時機 IV - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;最多買賣k次&#xff0c;每次都有持有和不持有&#xff0c;所以下標最大到dp[i][2k]。 309.最佳買賣股票時機含冷凍期 309. 買賣股票的最佳時機含冷凍期 - 力…

百度智能云創新業務部總經理李想:發揮AI企業科技創新優勢 助力職業教育人才揚帆遠航

前言&#xff1a;百度智能云教育行業解決方案作為百度智能云旗下的創新力量&#xff0c;專注于培養“AI教育”領域的新質生產力人才&#xff0c;一直以來備受職業教育領域的關注。在第六屆人工智能“職教百強”院校長論壇開幕之際&#xff0c;中教全媒體對話論壇嘉賓百度智能云…

最新扣子(Coze)實戰案例:使用圖像流做超分,模糊圖片秒變清晰,完全免費教程

&#x1f9d9;?♂? 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI應用。 &#x1f4dc; 本教程是《AI應用開發系列教程之扣子(Coze)實戰教程》&#xff0c;完全免費學習。 &#x1f440; 關注斜杠君&#xff0c;可獲取完整版教程。&#x1f44d;&#x1f3f…

當需要對大量數據進行排序操作時,怎樣優化內存使用和性能?

文章目錄 一、選擇合適的排序算法1. 快速排序2. 歸并排序3. 堆排序 二、數據結構優化1. 使用索引2. 壓縮數據3. 分塊排序 三、外部排序1. 多路歸并排序 四、利用多核和并行計算1. 多線程排序2. 使用并行流 五、性能調優技巧1. 避免不必要的內存復制2. 緩存友好性3. 基準測試和性…

區塊鏈技術如何改變供應鏈管理?

引言 供應鏈管理在現代商業中扮演著至關重要的角色&#xff0c;確保產品和服務從原材料到最終消費者的順利流轉。然而&#xff0c;當前的供應鏈管理面臨諸多挑戰&#xff0c;如信息不透明、數據篡改和效率低下等問題&#xff0c;這些問題嚴重制約了供應鏈的整體效能和可信度&am…

多模態圖像引導手術導航進展

**摘要&#xff1a;**對多模態圖像分割建模、手術方案決策、手術空間位姿標定與跟蹤、多模態圖像配準、圖像融合與顯示等多模態圖像引導手術導航的關鍵技術進行總結和分析&#xff0c;提出其進一步發展面臨的挑戰并展望其未來發展趨勢。 **外科手術的發展歷程&#xff1a;**從最…

簡單分享下python多態

目錄&#xff1a; 一、多態是啥嘞&#xff08;龍生九子各有不同&#xff0c;這就是多態&#xff09; 二、基礎的實例 三、多態的優勢與應用場景 四、深入理解 一、多態是啥嘞&#xff08;龍生九子各有不同&#xff0c;這就是多態&#xff09; 多態&#xff08;Polymorphism&…

ffmpeg 獲取視頻時長的命令及其輸出

要獲取視頻的時長&#xff0c;可以使用FFmpeg的-i參數&#xff0c;后跟視頻文件的路徑。下面是獲取視頻時長的命令示例&#xff1a; ffmpeg -i input.mp4輸出示例&#xff1a; Input #0, mov,mp4,m4a,3gp,3g2,mj2, from input.mp4:Metadata:major_brand : mp42minor_vers…

筆記14:程序中的循環結構

生活中的循環現象&#xff1a; -日復一日&#xff0c;年復一年 -春夏秋冬&#xff0c;四季交替 -周日&#xff0c;周一&#xff0c;周二&#xff0c;周三&#xff0c;周四&#xff0c;周五&#xff0c;周六 -人生是一個輪回&#xff0c;多年后&#xff0c;又會回到最初的原點 …

C++|哈希應用->布隆過濾器

目錄 一、概念 二、模擬實現 三、布隆過濾器擴展應用 上一篇章學習了位圖的使用&#xff0c;但它只適用于整數&#xff0c;對于要查詢字符串是否在不在&#xff0c;位圖并不能解決。所以針對這一問題&#xff0c;布隆過濾器可以派上用場&#xff0c;至于布隆過濾器是什么&am…

全球首款商用,AI為視頻自動配音配樂產品上線

近日&#xff0c;海外推出了一款名為Resona V2A的產品&#xff0c;這是全球首款商用視頻轉音頻 (V2A) 技術產品。這項突破性技術利用AI&#xff0c;僅憑視頻數據即可自動生成高質量、與上下文相關的音頻&#xff0c;包括聲音設計、音效、擬音和環境音&#xff0c;為電影制作人、…

linux內核開發之tftp服務搭建

TFTP (Trivial File Transfer Protocol) 是一個簡單的文件傳輸協議&#xff0c;通常用于在計算機網絡中進行文件傳輸。它是FTP的一個簡化版本&#xff0c;主要用于在局域網內部傳輸文件。 主要特點和用途&#xff1a; 簡單性&#xff1a; TFTP設計簡單&#xff0c;功能有限&am…

Hi3861 OpenHarmony嵌入式應用入門--TCP Server

本篇使用的是lwip編寫tcp服務端。需要提前準備好一個PARAM_HOTSPOT_SSID宏定義的熱點&#xff0c;并且密碼為PARAM_HOTSPOT_PSK LwIP簡介 LwIP是什么&#xff1f; A Lightweight TCP/IP stack 一個輕量級的TCP/IP協議棧 詳細介紹請參考LwIP項目官網&#xff1a;lwIP - A Li…