簡析安卓事件分發

2021-07-09 23:02:53 字數 1556 閱讀 5371

ontouchevent,dispatchtouchevent,setontouchlistener

無論是down,move,up執行的順序都是:

首先執行的是:

dispatchtouchevent

public

boolean

dispatchtouchevent(motionevent event)

return ontouchevent(event);

}

view響應事件,首先執行dispatchtouchevent

2.ontouchevent

處理down,move,up ,其中onclicklistener 在這裡執行

public

boolean

ontouchevent(motionevent event)

if (mtouchdelegate != null)

}if (((viewflags & clickable) == clickable ||

(viewflags & long_clickable) == long_clickable))

return

true;

}return

false;

}

無論是down,move,up 都會返回true ,如果down返回false 那麼up就不會執行了

//其中的up中的 performclick()就執行onclicklistener.onclick

public

boolean

performclick()

return

false;

}

執行順序:

dispatchtouchevent->onintercepttouchevent->子view的dispathtouchevent

public

boolean

dispatchtouchevent(motionevent ev) }}

}if (target == null)

return target.dispatchtouchevent(ev);

}

disallowintercept預設是false的 不關閉攔截

如果未false 那麼就判斷onintercepttouchevent 是否攔截true 攔截了(就是不進入if方法中執行)

如果想父view不攔截事件直接呼叫

getparent().requestdisallowintercepttouchevent(true); disallowintercept=true (即直接進入if中)

然後for迴圈判斷x,y是否落入到子view中,是呼叫子view的dispatchtouchevent 方法,如果返回true 直接返回不往下執行

if()執行完如果mmotiontarget==null 那麼會呼叫父類的dispatchtouchevent 父類是view那麼此時就可以把viewgroup的view的事件分發處理了

安卓事件分發

dispatchtouchevent 事件派發先是隧道方式 再是冒泡方式 隧道方式傳遞,直到某乙個元素消耗此事件,由上至下逐層分發檢視。冒泡方式傳遞,當某個檢視消耗事件後,其return true,是與分發相反的方法向上傳遞。具體分發給哪乙個檢視是通過當前觸控點座標在當前層哪個檢視上判斷 onint...

安卓事件分發機制學習

在學習事件分發機制之前,需要先對以下幾個知識點有所了解 view和viewgroup什麼?事件 view 事件的分發機制 viewgroup事件的分發機制 一 view和viewgroup view view是所有ui元件的基類,viewgroup 是容納這些元件的容器,其本身也是從view派生出來...

安卓事件分發學習總結(下)

作者的文章已經寫得很清楚了。viewgroup就是比變通的view多了個攔截機制,通俗點講就是viewgroup中重寫了dispatchtouchevent 在其中加上了攔截和對子view的分發管理,而預設情況下是不會攔截的。借用一下作者整理的總結 1.android事件分發是先傳遞到viewgro...