2014年2月13日 星期四

Android 開發 (二十八) onInterceptTouchEvent 和 onTouchEvent 的處理

為何要瞭解event的處理

有些時候會在viewgroup裡放其他View,然後會希望某些view的touch event不動作,這時候就必須設法去處理onInterceptTouchEvent  和  onTouchEvent。
例如在viewpager裡面放 imageview,當click在imageview時不希望viewpager有動作,又或者listview 裡放button,但是只希望接收到listview click event。


甚麼是onInterceptTouchEvent  和  onTouchEvent

onInterceptTouchEvent就是用來攔截事件,而onTouchEvent是用來處理事件。
當事件被InterceptEvent攔截之後就不會再往下傳遞給childLayout,
然而當事件被Touchevent處理過後就不會再向ParentLayout傳遞。


當所有的event回傳值都是false時
可以看到debug log 從
 listview OninterceptEvent -> TextView OninterceptEvent
->TextView OnTouchEvent -> listview OnTouchEvent
假設 textview 的 onTouchevent 回傳值為 true
Debug log會變成
 listview OninterceptEvent -> TextView OninterceptEvent ->TextView OnTouchEvent
由於事件被textview處理完成 ,所以listview就不需再處理。
假設 listview 的 onInterceptEvent 回傳值為 true
Debug log會變成
 listview OninterceptEven ->ListView OnTouchEvent
由於事件被Listview攔截 ,所以textview就不會接收到event。

結論

利用onInterceptTouchEvent  和  onTouchEvent這兩個event,
就可以輕鬆客制化自己想要的行為。

沒有留言:

張貼留言