有些時候會在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,
就可以輕鬆客制化自己想要的行為。
沒有留言:
張貼留言