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了
明日再研究一二