android手勢事件

與手勢事件有關的方法

  1. dispatchTouchEvent():該方法將觸摸事件分發給相應的視圖或視圖組。
  2. onInterceptTouchEvent():該方法用于判斷是否需要攔截觸摸事件,如果需要攔截,則返回 true,否則返回 false。
  3. onTouchEvent():該方法用于處理觸摸事件,返回一個 boolean 類型的值,表示是否消費了該事件。

此外,與手勢事件有關的常見方法還包括:

  • onTouch():在視圖上觸摸了屏幕時調用。
  • onLongPress():在視圖上長按屏幕時調用。
  • onDoubleTap():在視圖上雙擊屏幕時調用。
  • onSingleTapUp():在視圖上單擊屏幕并且手指抬起時調用。
  • onShowPress():在視圖上按下屏幕并且沒有松開時調用。
  • onDown():在視圖上按下屏幕時調用。
  • onUp():在視圖上抬起手指時調用。
  • onScroll():在視圖上發生滾動時調用。
  • onFling():在視圖上發生滑動時調用。

手勢事件的分發流程可以描述如下:

  • 用戶在屏幕上進行觸摸操作,觸摸事件被Android系統捕獲。
  • Android系統首先將觸摸事件傳遞給當前活動的窗口,即頂層的窗口。
  • 窗口會將觸摸事件傳遞給當前顯示的頁面類(Activity、Fragment等)。
  • 頁面類會根據觸摸事件的類型,將其分發給相應的容器類或控件類。
  • 容器類(ViewGroup)會先接收到觸摸事件,它會遍歷其子視圖,并將觸摸事件傳遞給子視圖,直到找到合適的控件類。
  • 控件類(Button、ImageView等)接收到觸摸事件后,會根據事件類型進行相應的處理。如果控件類設置了觸摸監聽器(OnTouchListener),則會調用監聽器中的回調方法。
  • 如果沒有設置觸摸監聽器,控件類會判斷是否實現了手勢識別的接口(如OnGestureListener),如果實現了,則會調用相應的手勢回調方法。
  • 如果觸摸事件沒有被任何控件類處理或消耗,那么事件將繼續向上層傳遞,直到被處理或到達頂層窗口。
  • 如果觸摸事件最終沒有被處理,系統會執行默認的處理邏輯,例如滾動屏幕或執行點擊操作。
  • 需要注意的是,觸摸事件的分發流程是按照視圖層次結構從上到下的順序進行的,即從窗口到頁面類、容器類和控件類。每個層次的組件都有機會處理觸摸事件,

如果事件被處理或消耗,則不會繼續向下傳遞。這樣可以實現觸摸事件的精確分發和響應。

手勢方法的執行者

對于Android觸摸事件中手勢方法的執行者,可以將其進一步細分為頁面類、容器類和控件類。

  1. 頁面類(Activity、Fragment等):在Android應用中,頁面類是最頂層的組件,負責顯示用戶界面和處理用戶交互。頁面類可以實現手勢識別的接口,并通過重寫相應的手勢回調方法來處理手勢事件。例如,可以在頁面類中實現OnGestureListener接口,重寫onFling()方法來處理滑動手勢。
  2. 容器類(ViewGroup):容器類是用于包含和管理其他視圖組件的容器。例如,LinearLayout、RelativeLayout等。容器類可以監聽并處理手勢事件,并傳遞給包含在其中的子視圖或控件。在容器類中,可以實現OnTouchListener接口或重寫onTouchEvent()方法來處理手勢事件。只有容器類可以調用onInterceptTouchEvent方法
  3. 控件類(Button、ImageView等):控件類是Android中內置的UI組件,用于展示特定功能或接收用戶輸入。控件類可以設置監聽器來處理手勢事件,例如設置OnTouchListener接口或實現GestureDetector.OnGestureListener接口。通過將手勢事件傳遞給控件類,可以實現對于具體控件的手勢操作響應。

綜上所述,頁面類是頂層的組件,負責整個頁面的顯示和交互處理;容器類是用于包含和管理其他視圖組件的容器,負責組織和布局;

控件類是用于展示特定功能或接收用戶輸入的UI組件,負責展示和響應用戶的交互操作。通過理解它們的功能和作用,可以區分頁面類、容器類和控件類。

對實際開發來說,把常見的幾種手勢流程的排列組合搞清楚

  • 頁面類的手勢處理,它dispatchTouchEvent方法必須返回super.dispatchTouchEvent,如果不分發,頁面上的視圖就無法處理手勢,

至于頁面類的onTouchEvent方法,基本沒有什么作用。因為手勢動作要由具體視圖處理,頁面直接處理手勢沒有什么意義。所以,頁面類的手勢處理可以不用關心,直接略過,

  • 控件類的手勢處理。它的dispatchTouchEvent方法沒有任何作用,因為控件下面沒有子視圖,無所謂分不分發。至于控件類的onTouchEvent方法,如果要進行手勢處理,就需要自定義一個控件,

重寫自定義類中的onTouchEvent方法;如果不想自定義控件,就直接調用控件對象的 setOnTouchListener方法,注冊一個觸摸監聽器OnTouchListener,并實現該監聽器的onTouch方法。

所以,控件類的手勢處理只需關心onTouchEvent方法。

  • 容器類的手勢處理。這才是真正要深入了解的地方。容器類的dispatchTouchEvent與 onlnterceptTouchEvent方法都能決定是否將手勢交給子視圖處理。為了避免手勢響應沖突,

一般要重寫dispatchTouchEvent或者onlnterceptTouchEvent方法。這兩個方法的區別可以這么理解:前者是大領導,只管派發任務,不會自己做事情:后者是小領導,盡管有攔截的權利,

過也得自己做點事情,比如處理糾紛等。容器類的onTouchEvent方法近乎擺設,因為需要攔截的在前面已經攔截了,需要處理的在子視圖中已經處理了。

經過上面的詳細分析,常見的手勢處理方法有下面3個:

  • 頁面類的dispatchTouchEvent方法:控制事件的分發,決定把手勢交給誰處理。
  • 容器類的onlnterceptTouchEvent方法:控制事件的攔截,決定是否要把手勢交給子視圖處理。
  • 控件類的onTouchEvent方法:進行手勢事件的具體處理

在Android中,點擊事件的傳遞順序通常是按照以下順序進行的:

  1. Activity:當用戶點擊一個應用程序的界面時,首先會觸發該Activity的onTouchEvent()方法。
  2. Window:在Activity的onTouchEvent()方法中,會通過窗口管理系統(Window Manager)將觸摸事件傳遞給當前窗口(Window)。當前窗口可以是Activity中的任意一個視圖(View)。
  3. View:在窗口中,觸摸事件會被傳遞給視圖層次結構(View Hierarchy),從頂層視圖開始,依次向下傳遞。每個視圖都會根據自己的需要進行處理,例如,點擊事件可能被傳遞給一個按鈕(Button)或者文本框(TextView)等。

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

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

相關文章

神經網絡基礎-神經網絡補充概念-36-dropout正則化

概念 Dropout 是一種常用的正則化技術,用于減少深度神經網絡中的過擬合問題。它在訓練過程中隨機地將一部分神經元的輸出置為零,從而強制模型在訓練過程中學習多個獨立的子模型,從而減少神經元之間的依賴關系,提高模型的泛化能力…

記一次項目內存優化--內存泄漏

需求–內存泄漏優化,PSS有所下降, OOM率減少 主要是與某個版本作基準進行對比(一般是最新版本的前一個版本作原數據),優化后,PSS有所下降,線上OOM率減少(Bugly版本對比)…

程序員如何利用公網遠程訪問查詢本地硬盤【內網穿透】

🎬 鴿芷咕:個人主頁 🔥 個人專欄: 《高效編程技巧》《cpolar》 ??生活的理想,就是為了理想的生活! 公網遠程訪問本地硬盤文件【內網穿透】 文章目錄 公網遠程訪問本地硬盤文件【內網穿透】前言1. 下載cpolar和Everything軟件1.…

React 生態應用 - React Router(1)

目錄 擴展學習資料 安裝和導入 Route匹配 src/components/navbar.jsx src/App.js 擴展學習資料 資料名稱 鏈接 備注 閱讀react router組件文檔 https://react-router.docschina.org/web/guides/philosophy Introduction | React Router 中文文檔 擴展閱讀 路由鑒權 …

(stm32)低功耗模式

低功耗模式 執行哪個低功耗模式的程序判斷流程 標志位設置操作一定要在WFI/WFE之前,調用此指令后立即進入睡眠判斷流程 模式對比 睡眠模式 停止模式 待機模式

FLatten Transformer

FLatten Transformer: Vision Transformer using Focused Linear Attention ICCV 2023 聚焦式線性注意力模塊 關于Transformer 在Transformer模型應用于視覺領域的過程中,降低自注意力的計算復雜度是一個重要的研究方向。線性注意力通過兩個獨立的映射函數來近似S…

3 Python的數據類型

概述 在上一節,我們介紹了Python的基礎語法,包括:編碼格式、標識符、關鍵字、注釋、多行、空行、縮進、引號、輸入輸出、import、運算符、條件控制、循環等內容。Python是一種動態類型的編程語言,這意味著當你創建一個變量時&…

1.初識Web

文章目錄 1. 什么是Web?2.初始Web前端2.1.Web標準 1. 什么是Web? web:全球廣域網,也稱萬維網(www World Wide Web),能夠通過瀏覽器訪問的網站。 2.初始Web前端 網頁有哪些部分組成? 文字、圖片、音頻、視頻、超鏈接… 我們看到的網頁&am…

react 生命周期方法

組件的生命周期 每個組件都包含 “生命周期方法”,你可以重寫這些方法,以便于在運行過程中特定的階段執行這些方法。你可以使用此生命周期圖譜作為速查表。在下述列表中,常用的生命周期方法會被加粗。其余生命周期函數的使用則相對罕見。 掛…

Windows Oracle21C與PLSQL Developer 15配置

1、下載Oracle21c并安裝 下載地址:https://www.oracle.com/database/technologies/oracle21c-windows-downloads.html 2、下載PLSQL Developer 15并安裝 下載地址:https://www.allroundautomations.com/products/pl-sql-developer/#pricing 3、配置O…

TypeScript教程(四)基本運算符

一、運算符 TypeScript包含以下幾種運算符: 1.算術運算符 2.邏輯運算符 3.關系運算符 4.按位運算符 5.賦值運算符 6.三元/條件運算符 7.字符串運算符 8.類型運算符 1.算術運算符 y5 運算符描述例子x 運算結果y 運算結果加法xy275-減法xy-235*乘法xy*2105…

在線課堂錄播直播管理系統SpringBoot+Vue

在線課堂錄播直播管理系統SpringBootVue 文章目錄 在線課堂錄播直播管理系統SpringBootVue共三個端:后端、后臺管理系統、前端,如要學習看評論區(全部源碼、文檔、數據庫)。內置功能一、前端二、后臺管理三、后端--代碼全有。四、…

數據結構—排序

8.排序 8.1排序的概念 什么是排序? 排序:將一組雜亂無章的數據按一定規律順序排列起來。即,將無序序列排成一個有序序列(由小到大或由大到小)的運算。 如果參加排序的數據結點包含多個數據域,那么排序往…

ElasticSearch刪除索引【真實案例】

文章目錄 背景分析解決遇到的問題 - 刪除超時報錯信息解決辦法1:調大超時時間解決辦法2:調大ES堆內存參考背景 項目中使用了ELK技術棧實現了日志管理,但是日志管理功能目前并沒有在生產上實際使用。 但ELK程序依然在運行,導致系統磁盤發生告警,剩余可用磁盤不足10%。 所以…

async和await

一,基本使用 其實就是之前學過的異步函數,異步編程在函數前寫一個ansyc,就轉化為異步函數,返回的是一個promise對象,于是就可以使用await關鍵字,可以把異步函數寫成同步函數的形式,極大地提高代…

LVS-DR的RS進行ARP抑制的原因和LVS持久連接配置

一.RS的ARP抑制 1.為什么要抑制 2.如何抑制 (1)修改/etc/sysctl.conf文件,增加以下內容 (2)命令行臨時設置 二.LVS持久連接 1.客戶端持久連接 2.端口持久連接 3.防火墻標記持久連接 一.RS的ARP抑制 1.為什么要…

Binary operator ‘*‘ cannot be applied to two ‘Double?‘ operands

在 swift 中聲明 Double 類型參數變量在進行運算處理時拋出了如下異常 Binary operator * cannot be applied to two Double? operands 情況一 參數類型不匹配,需將參數類型進行匹配 self.max height / (length * width) // 初始 self.max height / (length * Double(wid…

Java“牽手”根據關鍵詞搜索(分類搜索)京東商品列表頁面數據獲取方法,京東API實現批量商品數據抓取示例

京東商城是一個網上購物平臺,售賣各類商品,包括服裝、鞋類、家居用品、美妝產品、電子產品等。要獲取京東商品列表和商品詳情頁面數據,您可以通過開放平臺的接口或者直接訪問京東商城的網頁來獲取商品詳情信息。以下是兩種常用方法的介紹&…

學校信息管理系統說明文檔

目錄 0學生信息管理系統體驗教程. 4 0.0Student management異地打開方法:. 4 1. 管理系統設計需求分析. 6 1.1 需求介紹. 6 1.2功能需求. 6 1.2.1 學生信息錄入. 6 1.2.2 學生信息查詢. 6 1.2.3 權限管理. 6 1.2.4 添加學生信息驗證. 6 2.功能介紹. 7 2.1…

快速上手PyCharm指南

PyCharm簡介 PyCharm是一種Python IDE(Integrated Development Environment,集成開發環境),帶有一整套可以幫助用戶在使用Python語言開發時提高其效率的工具,比如調試、語法高亮、項目管理、代碼跳轉、智能提示、自動…