学习view事件分发笔记

事件分发

activity中的处理

当手指触摸屏幕后,先由Activity ondispatch()收到,然后调用window的ondispatch(),如果返回true,说明有子view处理,循环结束,返回false分发链中无人处理,交由activity处理

window中的处理

window唯一实现类phonewindow ,调用了decorview的ondispatch()

decorview

顶级viewgrop,在viewgrop中ondispatch()收到点击事件,如果onintercepter返回true,代表这个事件自己消费不往下分发,调用ontouchEvent,如果设置了onTouchListener,会调用onTouch,如果ontouch返回true,ontouchEvent将无法收到事件,返回false ontouch就会收到事件,如果设置了onclicklistener 也会调用onclick,如果没有拦截,会把事件传给子view,调用他的ondispatch,当某个view在ontouch中返回true消费了事件,那么他的父view会记录下来,之后的一系列事件都交由他来处理,并且父view的onintercept不再调用,如果整条链中没有view处理,那么就会调用activity的ontouch

当viewgroup分发事件的时候,会遍历子view,看是否在动画,和点击的坐标是否在子view上,同时满足就会调用子view的ondispatch,完成分发

滑动冲突

外部viewgroup根据滑动方向或者距离决定自己处理还是交给子view处理,
记录滑动状态,如果还在滑动后续的down事件,父view直接处理不交给子view

内部子view根据滑动方向或距离请求父view是否拦截

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值