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