Android事件分发,事件拦截,事件处理总结

对于安卓的事件分发,拦截及事件处理无论是面试还是在日常应用中都涉及的比较多,网上的帖子也很多,感觉都没说透,或者没直接点出来,我认为郭神这篇博客写的事件分发理解的挺好 http://blog.csdn.net/sinyu890807/article/details/9097463

 1.对于事件的传递流程:安卓点击事件MotionEvent 传递流程 Activity - window(phoneWindow)-DecorView(顶级View,其实是个ViewGroup),由DecorView的dispatchTouchEvent向下分发事件,具体可看下里面的源码,如果ViewGroup中没有子元素,事件传递到此处,说明已经传到最底层了,它直接拦截掉这个事件交由其onTouchEvent处理,如果onTouchEvent不处理,则交由其上级处理,均不处理,则最后交由Activity 的onTouchEvent来处理这个事件。再比如:TextView 设置点击事件,这个传递过程是这样的,Activity(dispatchTouchEvent)-Window - DecorView,这个跟上面是一样的,因为TextView设置了onClickListener,当事件传递到TextView时,因为TextView 继承自View,View中没有拦截事件的方法,默认来说,到最底层View来说onTouchEvent 默认返回为true 来处理这个事件的,因为设置了onClickListener,最后会回调TextView的onClick方法,由此可见,onClickListener在事件传递的最末端! 

2.对于事件的拦截(一般来说ViewGroup中拦截的方法onInterceptTouchEvent),事件在分发的过程中,该父类group不想让下面的子类收到这个事件,这个消息,则他会在onInterceptTouchEvent中返回true,表示我要拦截这个事件,不让子类知道;返回false,则不拦截,事件继续向下传递。

3.对于事件的处理 ,事件的处理在对应拦截的那个类的onTouchEvent方法中进行处理,onTouchEvent 有actionDown,move,up等方法,如果最后onTouchEvnet返回true,表示我要处理消费了这个事件,反之,则不处理这个事件,交给上层ViewGroup或View来处理这个事件。

总结

事件分发:dispatchTouchEvent retrurn true 则向下分发事件,false,则不向下分发。

事件拦截:onInterceptTouchEvent return true 则表示我要拦截,事件流到自己的onTouchEvent中处理,false,则不拦截,继续的向下传递事件。

事件处理:onTouchEvent  reture true 则表示我要处理,反之,我不处理,交给上层ViewGroup或View来处理这个事件。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值