Android事件分發機制

2021-08-02 16:27:33 字數 1170 閱讀 5493

一、三個重要的方法

dispatchtouchevent() 、

onintercepttouchevent()(activity和view無此方法)

activity 作為事件的原始分發著會造成無響應

view最為事件的最末端要麼處理事件,要麼回傳事件

ontouchevent()

二、事件分發流程

activity–>phonewindow–>decorview–>viewgroup–>…….–>view

phonewindow:view的管理容器

decorview:phonewindow的內部類

如果最後view不處理事件 會一次回傳,如果activity不處理事件才會被浪費

當觸控事件action_down發生之後,先呼叫activity中的dispatchtouchevent函式進行處理,緊接著action_down事件傳遞給viewgroup中的dispatchtouchevent函式,接著viewgroup中的dispatchtouchevent中的action_down事件傳遞到呼叫viewgroup中的onintercepttouchevent函式,此函式負責攔截action_down事件。由於viewgroup下還包含子view,所以預設返回值為false,即不攔截此action_down事件。如果返回false,則action_down事件繼續傳遞給其子view。由於子view不是viewgroup的控制項,所以action_down事件接著傳遞到ontouchevent進行處理事件。此時訊息的傳遞基本上結束。從上可以分析,motionevent事件的傳遞是採用隧道方式傳遞。隧道方式,即從根元素依次往下傳遞直到最內層子元素或在中間某一元素中由於某一條件停止傳遞。

接下來繼續分析,事件的處理。剛才action_down事件傳遞到view的ontouchevent函式中處理了,預設是返回true,接著view的dispatchtouchevent返回true,再接著viewgroup的dispatchtouchevent返回true,最後activity的dispatchtouchevent返回true。我們發現,motionevent事件的處理採用冒泡方式。冒泡方式,從最內層子元素依次往外傳遞直到根元素或在中間某一元素中由於某一條件停止傳遞。

Android事件分發機制

public boolean dispatchtouchevent motionevent ev else return consume 上面的一段 將事件分發中三個主要方法的關係表現。一 touch 事件分析 事件分發 public boolean dispatchtouchevent motio...

Android事件分發機制

花了一下午的事件研究了一下android的事件分發機制,覺得有必要總結一下 順便分享出來,希望對大家有用 1 首先最重要的是需要了解viewgroup裡面重寫的三個方法 1 dispatchtouchevent 用於事件的分發 2 onintercepttouchevent用於事件的攔截 3 ont...

Android事件分發機制

android的事件傳遞對應著三個階段 分發 攔截和消費,分發 對應的方法是dispatchtouchevent方法,在android系統中,所有的觸控事件都是通過這個方法來分發的。返回值為true表示事件被當前檢視消費掉,返回super.方法表示繼續分發該事件,如果當前檢視是viewgroup及其...