关于listview重写onintercepttouchevent不响应move和up事件

本文探讨了ListView在重写onInterceptTouchEvent时,为何在move和up事件中不被调用的问题。通过分析ViewGroup的事件分发机制,指出在dispatchTouchEvent中,由于特定条件导致onInterceptTouchEvent未被调用。同时,通过自定义LinearLayout的实验,揭示了不拦截事件时,事件会如何在父视图和子视图间传递,并强调了子视图的可点击性对事件处理的影响。
摘要由CSDN通过智能技术生成

首先来讲讲viewgroup的事件分发机制(盗来的图):


首先执行diapatchtouch,在diapatchtouch中调用onintercepttouchevent,在其中判断有没有拦截,如果拦截了就不调用子view的diapatchtouch,调用自身的touch事件,如果不拦截就调用子view 的diapatchtouch,执行view的事件分发机制。

这里也再说说view的分发机制好了:首先必定的dispatchTouch

public boolean dispatchTouchEvent(MotionEvent event) {
    if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&
            mOnTouchListener.onTouch(this, event)) {
        return true;
    }
    return onTouchEvent(event);
}
mOnTouchListener就是我们setontouchlistner时候赋的值,这个值只要我们set了就不会空,第二个判断是是否可点击,最后一个就是我们在setontouchlistener中重写的那个touch方法,在这里如果我们的touch返回false的会就继续调用ontouchevent方法,在其中会调用onclick方法。还有一个要注意的地方,当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发后一个action

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值