View的Touch事件分发(一.初步了解)
Android中Touch事件的分發(fā)又分為View和ViewGroup的事件分發(fā),先來看簡單的View的touch事件分發(fā)。
一次完整的Touch事件序列為:
ACTION_DOWN -> ACTION_MOVE -> ACTION_UP
對(duì)于Touch事件的分發(fā),不管是View還是ViewGroup都和以下的三個(gè)方法有關(guān)系:
dispatchTouchEvent():事件分發(fā)
onInterceptTouchEvent():事件攔截(ViewGroup才有該方法,View沒有)
onTouchEvent():事件消費(fèi)
現(xiàn)象:給一個(gè)控件設(shè)置OnTouchListener和OnClickListener,點(diǎn)擊控件,會(huì)有以下3種結(jié)果:
1.OnTouchListener,OnTouchEvent,OnClickListener三個(gè)都有的情況下,OnTouchListener返回false :
OnTouchListener.DOWN?->?OnTouchEvent.DOWN?->?OnTouchListener.MOVE
->?OnTouchEvent.MOVE?->?OnTouchListener.UP ->?OnTouchEvent.UP ->?OnClickListener
View的事件調(diào)度順序是dispatchTouchEvent() -> onTouchListener() -> onTouchEvent() -> onLongCLick() -> onClick()
2.OnTouchListener,OnTouchEvent,OnClickListener三個(gè)都有的情況下?,OnTouchListener返回true :
OnTouchListener.DOWN?->?OnTouchListener.MOVE?->?OnTouchListener.UP
只執(zhí)行OnTouchListener,后續(xù)都不執(zhí)行
3.OnTouch,OnClickListener前提是OnTouchEvent返回true :
OnTouchEvent.DOWN?->?OnTouchEvent.MOVE?->?OnTouchEvent.UP
不會(huì)執(zhí)行OnClickListener
結(jié)論:
1.OnTouchListener()的onTouch()方法的執(zhí)行是優(yōu)先于View的OnTouchEvent()方法。
2.OnTouchListener的onTouch()方法返回了true,表示消費(fèi)了touch事件,后續(xù)View的onTouchEvent(),onClick(),onLongClick()也就不會(huì)再執(zhí)行了。
3.onClick(),onLongClick()等方法都是在onTouchEvnet()方法中進(jìn)行執(zhí)行的,ACTION_DOWN中處理長點(diǎn)擊onLongClick(),ACTION_UP中處理點(diǎn)擊onClick()。
后續(xù)會(huì)從源碼來分析整個(gè)View的Touch事件分發(fā)過程,源碼分析可?View的Touch事件分發(fā)(二.源碼分析)???????
總結(jié)
以上是生活随笔為你收集整理的View的Touch事件分发(一.初步了解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android自定义ViewGroup基
- 下一篇: View的Touch事件分发(二.源码分