事件攔截機制簡單分析

2021-08-03 10:14:16 字數 2711 閱讀 7422

1 viewgroup來說,有三個重要的事件攔截和處理的方法: dispatchtouchevent (motionevent e) , onintercepttouchevent(motionevent e), ontouchevent(motionevent e)

2 對於view來說,有兩個重要的事件攔截和處理方法: dispatchtouchevent(motionevent e), ontouchevent(motionevent e)

注: 從上述方法可知,有分發事件,攔截事件,處理事件

舉例1

巢狀結構是: 最外層是viewgroupa,中間層是viewgroupb,最底層是myview, 並重寫上述方法,不做任何處理時,執行過程如下,

分析: **事件的傳遞順序是: viewgroupa–>viewgroupb–>myview

事件的處理順序是: myview–>viewgroupb–>viewgroupa**

log輸出的記錄為: viewgroupa dispatchtouchevent

viewgroupa onintercepttouchevent

viewgroupb dispatchtouchevent

viewgroupb onintercepttouchevent

myview dispatchtouchevent

myview ontouchevent

viewgroupb ontouchevent

viewgroupa ontouchevent

舉例2

巢狀結構是: 最外層是viewgroupa,中間層是viewgroupb,最底層是myview, 並重寫上述方法,其中viewgroupa中的onintercepttouchevent 事件返回true 將事件攔截下來,執行過程如下,

log輸出的記錄為: viewgroupa dispatchtouchevent

viewgroupa onintercepttouchevent

viewgroupa ontouchevent

舉例3

巢狀結構是: 最外層是viewgroupa,中間層是viewgroupb,最底層是myview, 並重寫上述方法,其中viewgroupb中的onintercepttouchevent 事件返回true 將事件攔截下來,執行過程如下,

log輸出的記錄為: viewgroupa dispatchtouchevent

viewgroupa onintercepttouchevent

viewgroupb dispatchtouchevent

viewgroupb onintercepttouchevent

viewgroupb ontouchevent

viewgroupa ontouchevent

舉例4

巢狀結構是: 最外層是viewgroupa,中間層是viewgroupb,最底層是myview, 並重寫上述方法,其中myview中的ontouchevent 事件返回true 將事件攔截下來,執行過程如下,

log輸出的記錄為: viewgroupa dispatchtouchevent

viewgroupa onintercepttouchevent

viewgroupb dispatchtouchevent

viewgroupb onintercepttouchevent

myview dispatchtouchevent

myview ontouchevent

舉例5

巢狀結構是: 最外層是viewgroupa,中間層是viewgroupb,最底層是myview, 並重寫上述方法,其中viewgroupb中的dispatchtouchevent 事件返回true 將事件攔截下來,執行過程如下,

log輸出的記錄為: viewgroupa dispatchtouchevent

viewgroupa onintercepttouchevent

viewgroupb dispatchtouchevent

viewgroupb onintercepttouchevent

myview dispatchtouchevent

myview ontouchevent

viewgroupb ontouchevent

另: motionevent 是android為觸控事件封裝的乙個類, 觸控事件就是乙個動作的型別加座標就可以完成,

其中可以通過motionevent 中的event.getx()與event.getrawx獲取座標點; 通過不同的action(比如 motionevent.action_down, motionevent.action_move)來區分不用的動作型別.

事件攔截機制分析

1.對於viewgroup來說,重寫三個方法 1 public boolean dispatchtouchevent motionevent ev 這個方法用來分發touchevent 2 public boolean onintercepttouchevent motionevent ev 這個方...

快速學習 Mycat SQL 攔截機制

sql 攔截的原理是在路由之前攔截 sql,然後做其他處理,完了之後再做路由,執行,如下圖所示 預設的 實現了 mysql 轉義字元的過濾轉換,非預設 只有乙個攔截記錄 sql 的 a.預設 sql 配置 io.mycat.interceptor.impl.defaultsqlinterceptor...

如何繞過chrome的彈窗攔截機制

在chrome的安全機制裡面,非使用者觸發的window.open方法,是會被攔截的。舉個例子 var btn btn btn.click function 上面的 中,window.open是使用者觸發的時候,是不會被攔截的,可以正常開啟新視窗。再看下面這個 var btn btn btn.cli...