Android事件机制探讨(2)

发布时间:2024年01月17日

这篇博文是基于上篇Android 事件机制探讨(1)基础扩展而来,建议读本文之前先阅读上一篇。

事件的分发流程很复杂,接下来我们就引入setOnTouchListener和setOnClickListener来深入讲解,首先为ViewPager添加setOnTouchListener方法并打印日志,完整代码如下:

运行日志如下:

就看ACTION_DOWN 这个事件,从MainActivity中dispatchEvent到ViewPager中dispatchEvent,再到onIntercepTouchEvent,至此ACTION_DOWN执行结束了。

我们从日志可以看出ACTION_DOWN、ACIONT_MOVE、ACTION_UP三个事件都会传递到View里,但是都会在onTouch方法里终止传递,且并没有执行onTouchEvent事件消费方法,所以结论是:用户设置的setOnTouchListener会在onTouchEvent方法前调用,并且onTouch的返回值是false的话,会继续执行onTouchEvent方法,如果返回true的话,表明该事件被消费了,事件终止传递(我们在ViewGroup也设置了setOnTouchListener方法,但没有被执行,也是这个原因),并不会执行onTouchEvent方法。

ACTION_DOWN分发到View的onTouch,此时返回值为false,没有消费事件,继续执行onTouchEvent方法,该返回一样返回false,事件再往上传递给ViewGroup的onTouchEvent方法,因为我们为ViewGroup设置了setOnTouchListener,所以在执行onTouchEvent之前会先执行onTouch,而我们在onTouch方法返回了true,表明该事件被消费,接着传递终止,所以ViewGroup的onTouchEvent方法并没有被执行。

文章来源:https://blog.csdn.net/u012663055/article/details/135601630
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。