原来转过一篇文章,是关于onInterceptTouchEvent和onTouchEvent的,时间久了都忘了差不多了,今天再重新回忆了一下,感觉理解又加深了一点。
测试的布局还是原来的,如下图所示:LayoutView1和LayoutView2都是LinearLayout, MyTextView是TextView.
情况一:
LayoutView1和LayoutView2中的onInterceptTouchEvent的down事件均返回false,onTouchEvent
处理时间均返回true.MyTextView的onTouchEvent返回true.
04-11 03:58:42.620: DEBUG/LayoutView1(614): onInterceptTouchEvent action:ACTION_DOWN
04-11 03:58:42.620: DEBUG/LayoutView2(614): onInterceptTouchEvent action:ACTION_DOWN
04-11 03:58:42.620: DEBUG/MyTextView(614): onTouchEvent action:ACTION_DOWN
04-11 03:58:42.800: DEBUG/LayoutView1(614): onInterceptTouchEvent action:ACTION_MOVE
04-11 03:58:42.800: DEBUG/LayoutView2(614): onInterceptTouchEvent action:ACTION_MOVE
04-11 03:58:42.800: DEBUG/MyTextView(614): onTouchEvent action:ACTION_MOVE
…… //省略过多的ACTION_MOVE
04-11 03:58:43.130: DEBUG/LayoutView1(614): onInterceptTouchEvent action:ACTION_UP
04-11 03:58:43.130: DEBUG/LayoutView2(614): onInterceptTouchEvent action:ACTION_UP
04-11 03:58:43.150: DEBUG/MyTextView(614): onTouchEvent action:ACTION_UP
可以看出down事件没有经过LayoutView1和LayoutView2的onTouchEvent,而直接到了目标控件MyTextView.
因为在LayoutView1和LayoutView2的onInterceptTouchEvent的down均返回false.即不拦截这个事件,
所以会先向下传递,直到传递给了MyTextView, MyTextView中onTouchEvent返回了true,即消费了事件,所以后续
的MOVE和UP事件不会传递给LayoutView2和LayoutView1的onTouchEvent。
情况二:当LayoutView1的onInterceptTouchEvent()处理down返回true
04-11 03:09:27.589: DEBUG/LayoutView1(446): onInterceptTouchEvent action:ACTION_DOWN
04-11 03:09:27.589: DEBUG/LayoutView1(446): onTouchEvent action:ACTION_DOWN
04-11 03:09:27.629: DEBUG/LayoutView1(446): onTouchEvent action:ACTION_MOVE
04-11 03:09:27.689: DEBUG/LayoutView1(446): onTouchEvent action:ACTIO