View的事件體系

2021-07-11 01:04:47 字數 1246 閱讀 1390

onintercepttouchevent()用於處理事件並改變事件的傳遞方向。處理事件這個不用說了,你在函式內部編寫**處理就可以了。而決定傳遞方向的是返回值,返回為false時事件會傳遞給子控制項的onintercepttouchevent();返回值為true時事件會傳遞給當前控制項的ontouchevent(),而不在傳遞給子控制項,這就是所謂的intercept(截斷)。

ontouchevent() 用於處理事件,返回值決定當前控制項是否消費(consume)了這個事件。可能你要問是否消費了又區別嗎,反正我已經針對事件編寫了處理**?答案是有區別!比如action_move或者action_up發生的前提是一定曾經發生了action_down,如果你沒有消費action_down,那麼系統會認為action_down沒有發生過,所以action_move或者action_up就不能**獲。

<?xml version="1.0" encoding="utf-8"?>

在沒有重寫onintercepttouchevent()和ontouchevent()的情況下(他們的返回值都是false), 對上面這個布局,motionevent事件的傳遞順序如下:

當某個控制項的onintercepttouchevent()返回值為true時,就會發生截斷,事件被傳到當前控制項的ontouchevent()。如我們將layoutview2的onintercepttouchevent()返回值為true,則傳遞流程變成:

如果我們同時將layoutview2的onintercepttouchevent()和ontouchevent()設定成true,那麼layoutview2將消費被傳遞的事件,同時後續事件(如跟著action_down的action_move或者action_up)會直接傳給layoutview2的ontouchevent(),不傳給其他任何控制項的任何函式。同時傳遞給子空間乙個action_cancel事件。傳遞流程變成(圖中沒有畫出action_cancel事件):

view 事件體系

view是android中所有控制項的基類,viewgroup內部包含了許多個控制項,即一組view。在android的設計中,viewgroup也繼承了view,這就意味著view本身就可以是單個控制項也可以是由多個控制項組成的一組控制項,通過這種關係就形成了view樹的結構 我們給出乙個簡略圖,...

View的事件體系 事件分發機制

viewgroup事件傳遞方法 dispatchtouchevent onintercepttouchevent ontouchevent 1 dispatchtouchevent 當前view接到事件呼叫的方法,返回boolean型別值,會呼叫如下偽 邏輯,所以返回值會受自己的 ontouchev...

Android之View的事件體系

velocitytracker,gesturedetector,scroller 1.velocitytracker 速度追蹤 在ontouch中新增 override public boolean ontouch view v,motionevent event 不過回頭一看,發現書中是放在ont...