Android事件分发 笔记

本文详细解析了Android中View和ViewGroup的事件分发机制,包括触摸事件的分发流程、伪代码示例及执行顺序,帮助开发者深入理解触摸事件如何在Android应用中被处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考链接
http://blog.youkuaiyun.com/guolin_blog/article/details/9097463/
http://blog.youkuaiyun.com/guolin_blog/article/details/9153747
http://www.cnblogs.com/sunzn/archive/2013/05/10/3064129.html

Android事件分发老容易忘呢。。。

View的事件分发伪代码:

View.dispatchTouchEvent{
  if(mOnTouchListener != null &&  View.onTouch的返回值){
     return true;
  }
  return View.onTouchEvent(event);
}

补充:
onTouchEvent中存在一个performClick方法,onClick方法在performClick会被调用 从一个View点击到抬手的动作,执行的方法顺序如下:
View.dispatchEvent->View.setOnTouchListener中的onTouch方法-View.onTouchEvent->View.onClick

从手接触屏幕到离开,事件大致如下
此处的Log 来源于鸿洋的博客

DOWN MOVE UP事件传递如下
04-06 10:24:42.158  7857  7857 E MyButton: dispatchTouchEvent ACTION_DOWN
04-06 10:24:42.158  7857  7857 E MainActivity: onTouch ACTION_DOWN
04-06 10:24:42.158  7857  7857 E MyButton: onTouchEvent ACTION_DOWN
04-06 10:24:42.866  7857  7857 E MyButton: dispatchTouchEvent ACTION_MOVE
04-06 10:24:42.866  7857  7857 E MainActivity: onTouch ACTION_MOVE
04-06 10:24:42.866  7857  7857 E MyButton: onTouchEvent ACTION_MOVE
04-06 10:24:42.882  7857  7857 E MyButton: dispatchTouchEvent ACTION_MOVE
04-06 10:24:42.882  7857  7857 E MainActivity: onTouch ACTION_MOVE
04-06 10:24:42.882  7857  7857 E MyButton: onTouchEvent ACTION_MOVE
04-06 10:24:42.922  7857  7857 E MyButton: dispatchTouchEvent ACTION_MOVE
04-06 10:24:42.922  7857  7857 E MainActivity: onTouch ACTION_MOVE
04-06 10:24:42.922  7857  7857 E MyButton: onTouchEvent ACTION_MOVE
04-06 10:24:42.959  7857  7857 E MyButton: dispatchTouchEvent ACTION_MOVE
04-06 10:24:42.959  7857  7857 E MainActivity: onTouch ACTION_MOVE
04-06 10:24:42.959  7857  7857 E MyButton: onTouchEvent ACTION_MOVE
04-06 10:24:44.277  7857  7857 E MyButton: dispatchTouchEvent ACTION_UP
04-06 10:24:44.277  7857  7857 E MainActivity: onTouch ACTION_UP
04-06 10:24:44.277  7857  7857 E MyButton: onTouchEvent ACTION_UP
04-06 10:24:44.279  7857  7857 E MainActivity: dispatchTouchEvent OnClick

ViewGroup事件分发的伪代码:

ViewGroup.dispatchTouchEvent{
    if (disallowIntercept || ! ViewGroup.onInterceptTouchEvent(ev)) {
        //遍历child,执行以下code
        if(child.dispatchTouchEvent(ev)){
            ...
            return true;
        }
    }
    if (target == null) {  
        ...  
        return super.dispatchTouchEvent(ev);//即view.dispatchTouchEvent
    }
}
//disallowIntercept默认false 

ViewGroup事件分发执行流程:还是借郭神的图片吧,比较清晰
这里写图片描述


=====
20/12/03更新 发现一篇讲的非常好的事件分发的文章
https://www.cnblogs.com/renhui/p/12127680.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值