博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序【转】
阅读量:6997 次
发布时间:2019-06-27

本文共 975 字,大约阅读时间需要 3 分钟。

onInterceptTouchEvent()用于处理事件并改变事件的传递方向。处理事件这个不用说了,你在函数内部编写代码处理就可以了。而决定传递方向的是返回值,返回为false时事件会传递给子控件的onInterceptTouchEvent();返回值为true时事件会传递给当前控件的onTouchEvent(),而不在传递给子控件,这就是所谓的Intercept(截断)。

onTouchEvent() 用于处理事件,返回值决定当前控件是否消费(consume)了这个事件。可能你要问是否消费了又区别吗,反正我已经针对事件编写了处理代码?答案是有区别!比如ACTION_MOVE或者ACTION_UP发生的前提是一定曾经发生了ACTION_DOWN,如果你没有消费ACTION_DOWN,那么系统会认为ACTION_DOWN没有发生过,所以ACTION_MOVE或者ACTION_UP就不能被捕获。

本文源地址: ,转载请注明出处!

在没有重写onInterceptTouchEvent()和onTouchEvent()的情况下(他们的返回值都是false), 对上面这个布局,MotionEvent事件的传递顺序如下:

当某个控件的onInterceptTouchEvent()返回值为true时,就会发生截断,事件被传到当前控件的onTouchEvent()。如我们将LayoutView2的onInterceptTouchEvent()返回值为true,则传递流程变成:

如果我们同时将LayoutView2的onInterceptTouchEvent()和onTouchEvent()设置成true,那么LayoutView2将消费被传递的事件,同时后续事件(如跟着ACTION_DOWN的ACTION_MOVE或者ACTION_UP)会直接传给LayoutView2的onTouchEvent(),不传给其他任何控件的任何函数。同时传递给子空间一个ACTION_CANCEL事件。传递流程变成(图中没有画出ACTION_CANCEL事件):

转载于:https://www.cnblogs.com/kingcent/archive/2011/03/08/1977064.html

你可能感兴趣的文章
假删除,修改信息状态!
查看>>
面向对象个人总结其三 多态(一)
查看>>
这几天的学习生活
查看>>
SDNU 1204.水题(水题)
查看>>
POJ 3668 枚举?
查看>>
守护线程daemon
查看>>
C++ new(2)
查看>>
3-cd、pwd、ls命令
查看>>
<转>关于 error LNK2019:无法解析的外部符号 ,该符号在函数**中被引用的思考
查看>>
【bzoj4806~bzoj4808】炮车马后——象棋四连击
查看>>
centos6环境创建局域网http方式的yum源
查看>>
《代码大全》阅读笔记-23-调试
查看>>
JS正则检索匹配手机号
查看>>
Ad hoc update to system catalogs is not supported
查看>>
木叶Ghost_Win7 SP1 64位 装机版 2013.07
查看>>
rem 单位计算javaScript
查看>>
css3 变形设计涂鸦墙
查看>>
js只能输入数字和小数点
查看>>
关于上一个sql优化测试的部分知识
查看>>
day30 操作系统介绍 进程的创建
查看>>