Android View 触屏事件传递

文章是随笔整理,主要是给自己看的,防止以后忘记了
以单次的点击事件(比如Action_down、Action_move、Action_up)为例进行说明,首先传递给View的dispatchTouchEvent方法处理,如果该方法返回true,则进行下次的点击事件分发,如果该方法返回false,则停止事件的分发。
在dispatchTouchEvent方法中先调用onTouchListener(如果没有设置,默认返回false),后调用onTouchEvent方法(其中调用onClick)。所以如果在onTouchListener中返回false,则表现为onClickListener不会被回调。

boolean result = false;

.......

if (onFilterTouchEventForSecurity(event)) {
            //noinspection SimplifiableIfStatement
            ListenerInfo li = mListenerInfo;
            if (li != null && li.mOnTouchListener != null
                    && (mViewFlags & ENABLED_MASK) == ENABLED
                    && li.mOnTouchListener.onTouch(this, event)) {
                result = true;
            }

            if (!result && onTouchEvent(event)) {
                result = true;
            }
        }

......

return result;

看上边的代码片段可得出,如果没有设置过onTouchListener,第一个if自然执行不了,onTouchEvent自然会执行,意味着onClick也会执行。如果设置了onTouchListener并且返回true,那么result为true,下一个if判断条件中的&&后的内容得不到执行,表现出来的就是onClick没有被执行。
onTouchListener不管返回true或者false,只能影响onTouchEvent(即onClick)的执行,并不能阻断点击事件的传递。
但是onTouchEvent如果返回false,那么就会阻断touch事件继续向下传递。

http://blog.youkuaiyun.com/lvxiangan/article/details/9309927

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值