View(ViewGroup)事件传递《2》


触摸事件的传递顺序是由Acitivty到ViewGroup,再由ViewGroup递归传递给它的子View。

ViewGroup通过onInterceptTouchEvent方法对事件进行拦截,如果该方法返回true,则事件不会继续传递给子View。

如何返回false或者super.onInterceptTouchEvent(event);则事件会继续传递到子View.



按默认的返回super 运行结果:

01-25 15:07:44.888 24301-24301/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent Action_Down
01-25 15:07:44.889 24301-24301/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent Action_Down
01-25 15:07:44.889 24301-24301/com.qiandu.viewdispatchevent E/MyRelativeLayout: onInterceptTouchEvent Action_Down
01-25 15:07:44.889 24301-24301/com.qiandu.viewdispatchevent E/MyTextVIew: dispatchTouEvent Action_Down
01-25 15:07:44.889 24301-24301/com.qiandu.viewdispatchevent E/MainActivity: OnTouchListener Action_Down
01-25 15:07:44.889 24301-24301/com.qiandu.viewdispatchevent E/MyTextVIew: onTouchEvent Action_Down
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_MOVE
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent ACTION_MOVE
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MyRelativeLayout: onInterceptTouchEvent ACTION_MOVE
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MyTextVIew: dispatchTouEvent ACTION_MOVE
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MainActivity: OnTouchListener ACTION_MOVE
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MyTextVIew: onTouchEvent ACTION_MOVE
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_UP
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent ACTION_UP
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MyRelativeLayout: onInterceptTouchEvent ACTION_UP
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MyTextVIew: dispatchTouEvent ACTION_UP
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MainActivity: OnTouchListener ACTION_UP
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MyTextVIew: onTouchEvent ACTION_UP
01-25 15:07:44.948 24301-24301/com.qiandu.viewdispatchevent E/MainActivity: OnClickListener onClick



MyRelativeLayout(ViewGroup) dispatchTouchEvent return true
事件到ViewGroup 传递到dispatchTouchEvent被消耗后,不再传递给它的子View
:

01-25 15:18:28.099 1975-1975/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent Action_Down
01-25 15:18:28.100 1975-1975/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent Action_Down
01-25 15:18:28.173 1975-1975/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_MOVE
01-25 15:18:28.173 1975-1975/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent ACTION_MOVE
01-25 15:18:28.175 1975-1975/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_UP
01-25 15:18:28.175 1975-1975/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent ACTION_UP


MyRelativeLayout dispatchTouchEvent return false:
ViewGroup   没有给它子View传递Action_Down事件,而是传递给父布局(MainActivity)的onTouchEvent,并且
后续的系列事件也没有再传递给ViewGroup


01-25 15:20:23.911 4555-4555/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent Action_Down
01-25 15:20:23.911 4555-4555/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent Action_Down
01-25 15:20:23.911 4555-4555/com.qiandu.viewdispatchevent E/MainActivity: onTouchEvent Action_Down
01-25 15:20:23.953 4555-4555/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_UP
01-25 15:20:23.953 4555-4555/com.qiandu.viewdispatchevent E/MainActivity: onTouchEvent ACTION_UP



MyRelativeLayout onInterceptTouchEvent return true:
MyRelativeLayout onTouchEvent return true(即消耗事件)
事件不传递到子控件,到它的onTouchEvent执行完后 不再传递给子View


01-25 15:55:05.211 5616-5616/? E/art: setrlimit(RLIMIT_CORE) failed for pid 5616: Operation not permitted
01-25 15:55:06.853 5616-5616/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent Action_Down
01-25 15:55:06.853 5616-5616/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent Action_Down
01-25 15:55:06.853 5616-5616/com.qiandu.viewdispatchevent E/MyRelativeLayout: onInterceptTouchEvent Action_Down
01-25 15:55:06.853 5616-5616/com.qiandu.viewdispatchevent E/MyRelativeLayout: onTouchEvent Action_Down
01-25 15:55:06.899 5616-5616/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_MOVE
01-25 15:55:06.899 5616-5616/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent ACTION_MOVE
01-25 15:55:06.899 5616-5616/com.qiandu.viewdispatchevent E/MyRelativeLayout: onTouchEvent ACTION_MOVE
01-25 15:55:06.910 5616-5616/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_UP
01-25 15:55:06.910 5616-5616/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent ACTION_UP
01-25 15:55:06.910 5616-5616/com.qiandu.viewdispatchevent E/MyRelativeLayout: onTouchEvent ACTION_UP



MyRelativeLayout onInterceptTouchEvent return true:
MyRelativeLayout onTouchEvent return super.onTouchEvent(event) 或者 return fasle(即不消耗事件)
ViewGroup事件不传递给子View,并且后续系列事件不再传给ViewGroup

01-25 15:25:16.713 9492-9492/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent Action_Down
01-25 15:25:16.714 9492-9492/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent Action_Down
01-25 15:25:16.714 9492-9492/com.qiandu.viewdispatchevent E/MyRelativeLayout: onInterceptTouchEvent Action_Down
01-25 15:25:16.714 9492-9492/com.qiandu.viewdispatchevent E/MyRelativeLayout: onTouchEvent Action_Down
01-25 15:25:16.714 9492-9492/com.qiandu.viewdispatchevent E/MainActivity: onTouchEvent Action_Down
01-25 15:25:16.793 9492-9492/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_MOVE
01-25 15:25:16.793 9492-9492/com.qiandu.viewdispatchevent E/MainActivity: onTouchEvent ACTION_MOVE
01-25 15:25:16.809 9492-9492/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_MOVE
01-25 15:25:16.809 9492-9492/com.qiandu.viewdispatchevent E/MainActivity: onTouchEvent ACTION_MOVE
01-25 15:25:16.810 9492-9492/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_UP
01-25 15:25:16.810 9492-9492/com.qiandu.viewdispatchevent E/MainActivity: onTouchEvent ACTION_UP
MyRelativeLayout onInterceptTouchEvent return false:
ViewGroup不拦截事件,即与默认事件传递的结果一致,ViewGroup会将点击事件传递到子View

01-25 15:28:15.617 12095-12095/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent Action_Down
01-25 15:28:15.617 12095-12095/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent Action_Down
01-25 15:28:15.617 12095-12095/com.qiandu.viewdispatchevent E/MyRelativeLayout: onInterceptTouchEvent Action_Down
01-25 15:28:15.617 12095-12095/com.qiandu.viewdispatchevent E/MyTextVIew: dispatchTouEvent Action_Down
01-25 15:28:15.617 12095-12095/com.qiandu.viewdispatchevent E/MainActivity: OnTouchListener Action_Down
01-25 15:28:15.617 12095-12095/com.qiandu.viewdispatchevent E/MyTextVIew: onTouchEvent Action_Down
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_MOVE
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent ACTION_MOVE
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MyRelativeLayout: onInterceptTouchEvent ACTION_MOVE
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MyTextVIew: dispatchTouEvent ACTION_MOVE
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MainActivity: OnTouchListener ACTION_MOVE
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MyTextVIew: onTouchEvent ACTION_MOVE
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MainActivity: dispatchTouEvent ACTION_UP
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MyRelativeLayout: dispatchTouchEvent ACTION_UP
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MyRelativeLayout: onInterceptTouchEvent ACTION_UP
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MyTextVIew: dispatchTouEvent ACTION_UP
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MainActivity: OnTouchListener ACTION_UP
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MyTextVIew: onTouchEvent ACTION_UP
01-25 15:28:15.675 12095-12095/com.qiandu.viewdispatchevent E/MainActivity: OnClickListener onClick

调试DEMO(所有的参数都是默认的),修改返回值,进行测试
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值