Android自定义View-事件分发

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

dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent这三个方法过程完成。

dispatchTouchEvent:事件分发。

return true:表示事件被以该节点为根节点的View树成功处理,事件不会再向上返还。

return false:表示以该节点为根节点的View数,没有一个View处理此事件,所以事件向上返还给View的父节点。

onInterceptTouchEvent:事件拦截。

return true:当前ViewGroup自己处理该事件,不再传递给其child。

return false:当前ViewGroup不拦截该事件,事件传递给其child。

onTouchEvent:事件消耗。

return true:该View成功处理了该事件,不再向上返还。

return false:该View没有处理该事件,它的父节点来处理。

当一个点击事件产生后,Activity的dispatchTouchEvent()方法会最先接收到点击事件,然后向下传递传递,如果向下传递后ViewGroup和View都不做任何处理,事件会最后回到Activity的onTouchEvent()方法处理。

以Activity->ViewGroup->View三个为例,讨论各种情况:

1)不做任何处理:

日志显示结果:

事件传递流程:

 

2)Activity的dispatchTouchEvent()方法返回true或false:

日志显示结果:

事件分发过程:

 

 

3)Activity的onTouchEvent()方法返回true或false:同1)

4)ViewGroup的DispatchTouchEvent()方法返回true:

日志显示结果:

事件分发过程:

 

5)ViewGroup的dispatchTouchEvent()方法返回false:

日志显示结果:

事件分发过程:

 

 

6)ViewGroup的onInterceptTouchEvent()方法返回true:

日志显示结果:

事件分发流程:

 

7)ViewGroup的onInterceptTouchEvent()方法返回false:同1)

8)ViewGroup的onTouchEvent()方法返回true:

日志显示结果:

事件分发过程:

 

9)ViewGroup的OnTouchEvent()方法返回false:同1)

10)View的dispatchTouchEvent()方法返回true:

日志显示结果:

事件分发过程:

 

11)View的dispatchTouchEvent()方法返回false:

日志显示结果:

事件分发过程:

 

 

12)View的onTouchEvent()方法返回true:

日志显示结果:

事件分发过程:

 

 

13)View的onTouchEvent方法返回false:同1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                            

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值