相關Touch事件的方法
1、public boolean dispatchTouchEvent(MotionEvent ev) ————事件分發方法,分發Event所調用
2、public boolean onInterceptTouchEvent(MotionEvent ev) ————事件攔截方法,攔截Event所調用
3、public boolean onTouchEvent(MotionEvent event) ————事件響應方法,處理Event所調用
擁有上述事件的類
1、Activity類(Activity及其各種繼承子類)
dispatchTouchEvent()、onTouchEvent()
2、ViewGroup類(LinearLayout、FrameLayout、ListView等…..)
dispatchTouchEvent()、onInterceptTouchEvent()、onTouchEvent()
3、View類(Button、TextView等…..)
dispatchTouchEvent()、onTouchEvent()
需要特別注意一點就是ViewGroup中額外擁有onInterceptTouchEvent()方法,其他兩個方法爲這三種類所共同擁有
方法的簡單用途解析
我們可以發現這三個方法的返回值都爲boolean類型,其實它們就是通過返回值來決定下一步的傳遞處理方向。
1、dispatchTouchEvent() ——用來分發事件所用
該方法會將根元素的事件自上而下依次分發到內層子元素中,直到被終止或者到達最裏層元素,該方法也是採用一種隧道方式來分發。在其中會調用onInterceptTouchEvent()和onTouchEvent(),一般不會去重寫。
返回false則不攔截繼續往下分發,如果返回true則攔截住該事件不在向下層元素分發,在dispatchTouchEvent()方法中默認返回false。
2、onInterceptTouchEvent() ——用來攔截事件所用
該方法在ViewGroup源代碼中實現就是返回false不攔截事件,Touch事件就會往下傳遞給其子View。
如果我們重寫該方法並且將其返回true,該事件將會被攔截,並且被當前ViewGroup處理,調用該類的onTouchEvent()方法。
3、onTouchEvent() ——用來處理事件
返回true則表示該View能處理該事件,事件將終止向上傳遞(傳遞給其父View)
返回false表示不能處理,則把事件傳遞給其父View的onTouchEvent()方法來處理