android view(3)事件处理流程

本文详细解析了Android中MotionEvent的分发与处理流程,包括onInterceptTouchEvent、onTouchEvent和dispatchTouchEvent三个关键方法的作用及实现逻辑。

一、分发

当一个MotionEvent产生后,系统要把这个事件传递给具体的view,这个传递过程就是分发。

1.public boolean onInterceptTouchEvent(MotionEvent event)

返回Boolean结果,表示是否拦截处理此事件,默认返回false表示不拦截。只有viewgroup才有此方法,view没有,所以view收到后会立即执行onTouchEvent。

2.public boolean onTouchEvent(MotionEvent event)

自己去处理这个事件,返回结果表示是否消耗此事件。view的onTouchEvent默认消耗此事件。

3.public boolean dispatchTouchEvent(MotionEvent event)

继续往子元素分发事件,返回结果表示是否消耗此事件

伪代码如下

public boolean dispatchTouchEvent(MotionEvent event){

   boolean consume = false;

   if(onInterceptTouchEvent(event)){

      consume = onTouchEvent(event);

   }else{

      consume = child.dispatchTouchEvent(event);

   }

   return consume;

}

分发会从Activity开始,经过PhoneWindow,DecorView,再传入下面的元素中。

二、处理

如果View的onTouchEvent返回了False,表示不处理。就会调上层的onTouchEvent,上层不处理,继续往上反馈。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值