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...