onInterceptTouchEvent与onTouchEvent辨析

          好多人都说android很好学,上手快。这种说法不无道理,但是要是想学好,成为真正的高手,就必须夯实基础,一些简单基本概念,流程以及用法要弄清楚。

        记得刚接触的android的时候就遇见一个问题,就是在LIstView中的button的点击事件没法触发。现在回首发现是很简单的一个问题。

        今天,就讲解一个事件处理的小细节,onTouchEvent与onInterceptTouchEvent。

言归正传,首先看一下一个touch事件的大体流程:

        Activity.dispatchTouchEvent()

        ViewGroup.dispatchTouchEvent()

        View.dispatchTouchEvent()

        View.onTouchEvent()

        ViewGroup.onTouchEvent()

        Activity.onTouchEvent()


方法onInterceptTouchEvent是ViewGroup的方法,从字面意思上可以看到Intercept是截获的意思,截获与否是相对于其子view来讲的,截获与不截获对应的返回值是true和false。

onInterceptTouchEvent 返回false,则后续再来的事件(比如ACTION_UP)会继续传递给子view的onTouchEvent,如果onInterceptTouchEvent 返回true,则后续再来的事件(比如ACTION_UP)就不会传递给子view,而是只会给当前控件的onTouchEvent去处理

        view的onTouchEvent返回true,则表示事件已经消化干净,viewgroup的onTouchEvent将不会被调用,否则相反。

        值得注意的是如果ACTION_DOWN事件view在onTouchEvent中返回的是false,那么表示当前view没有消费ACTION_DOWN事件,因此,在当前view看来,就如同没有发生过ACTION_DOWN事件一样,而ACTION_DOWN事件又是其他事件处理的基础,所以,后续的ACTION_UP事件或者ACTION_MOVE来的时候,view也不会接受到这个事件。




附上官方对于onInterceptTouchEvent 的解释;
3、For as long as you return false from this function, each following event (up to and including the final up) will be delivered first here and then to the target's onTouchEvent().

4、If you return true from here, you will not receive any following events: the target view will receive the same event but with the action ACTION_CANCEL, and all further events will be delivered to your onTouchEvent() method and no longer appear here.
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值