android TouchEvent事件传递

touch事件对于初学者来说,一直是个坑,入坑易,出坑难,简单点的touch事件还好,稍微复杂点的就搞不懂了


首先touch事件由根view(view或者viewgroup)  dispatchTouchEvent分发,

然后可能会被interepter拦截,

然后判断touch坐标,来决定位于根view(viewgroup)的哪一个子view中(如果它有子view)

接下来,又类似重复上面步骤,view dispatchTouchEvent,interepter,判断坐标

最终确定到某一个view中


然后view的touchEvent有个返回值,

true表示消费了这个事件,即,不再往下传递

false表示没有消费这个事件,即,在这一层之后还可以继续传递下去











1----------------------------------------------------

activity中有个ontouchEvent  返回false

根view  A中有个OnTouchEvent 返回false

开始:activity dispatchTouchEvent

然后:A中的dispatchTouchEvent

然偶:A中OnTouchEvent中touch down事件,

然后activity 中OnTouchEvent的touchDown事件

再然后,所有事件都是在activity中经历dispatchTouchEvent,OnTouchEvent了


解释:所有view都没有消费这个事件,那么事件显示从根到孙子view传递,在从孙子view传回到跟。(这样只是好理解点,实际上是,根view问所有子view,这个事件是谁的呀?子view看了看,然后把玩了一下,最后发现不是自己的,然后子view又问孙子view,一路问下去,结果都说不是自己的也就是返回false,好根view说,好吧,那就交给我来处理了),接下来的事件(move up)activity的dispatch就会设置为由activity消费



2--------------------------------

activity中有个ontouchEvent  返回false或者true

根view  A中有个OnTouchEvent 返回true

开始:activity dispatchTouchEvent

然后:A中的dispatchTouchEvent

然偶:A中OnTouchEvent中touch down事件,

再然后,所有事件都是在activity中经历dispatchTouchEvent,然后viewA中dispatchTouchEvent,最后ViewA中OnTouchEvent了


解释:根view问所有子view,这个事件是谁的呀?然后子view又问孙子view,一路问下去,结果有一个不知道是儿子还是孙子的说,是我的,然后告诉它的父亲(也就是返回true),那么就不用再去问其他的子孙了。以后的事件,也这样问一次(move,up),得到的都是相同的结果(这里还有疑惑,到底是这样,还是和1一样记录了标志,然后直接分发)


明日再研究一二




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值