Android 開發中踩過的坑之三:Touch事件相關方法

View嵌套的時候, Touch事件的傳遞, 常常讓人頭疼. 
spa

好比在ScrollView裏, 在WebView裏, 在ListView裏. 事件的傳遞的結果會讓你以爲"這太靈異了!"事件


麻煩的代碼就不說了,若是隻作上層App, 那也只有爲數很少的幾個方法可讓咱們處理這些靈異問題:ci

onTouchEvent(), dispatchTouchEvent(), onInterceptTouchEvent().it

而且處理的方案, 也只有控制他們的返回值.List

這三個方法的返回值, 意義各不相同:
方法

onTouchEvent(): di

true: "我處理了這個事件, 而且與我在同一個ViewGroup下的其餘View將不能再處理這個事件"vi

false:"我處理了這個事件, 而且與我在同一個ViewGroup下的其餘View能夠繼續處理這個事件"工作


dispatchTouchEvent()控件

true: "我對這個事件(一般是Down事件)感興趣, 我將在onTouchEvent中處理這個事件"

false: "我對這個事件沒興趣, 我不會處理這個事件以及以後與這個事件相關的move, up事件"


onInterceptTouchEvent

這方法是ViewGroup的方法,

true: "個人子View將不能處理這個事件, 不會調用子View的onTouchEvent"

fasle: "個人子View能夠繼續處理這個事件, 我會將事件傳遞給子View"


如此. 基本引發靈異事件的就這仨方法了. 

當發現onTouch不能工做, 檢查一下View的dispatchTouchEvent是否返回了false, 或者檢查一下父View的onInterceptTouchEvent是否返回了true. 固然Acitivity也是有這幾個方法, 同樣須要檢查.


改的時候也要特別當心, 由於各類本身定義的控件, 都對相應的Touch事件有特殊處理, 因此要當心驗證重寫相關方法後是否會影響相關邏輯.

相關文章
相關標籤/搜索