事件传递机制总结(一)

自定义了两个viewgroup和一个view依次相套,代码测试得出以下结论。

一. touch事件的3个方法

public boolean dispatchTouchEvent(MotionEvent ev);  // 分发事件

public boolean onInterceptTouchEvent(MotionEvent ev);   // 拦截事件

public boolean onTouchEvent(MotionEvent ev);  // 处理事件

PS:viewgroup 拥有这三个方法   acitivity和view没有拦截方法,可以简单理解下,view是最后一个控件了下面没有任何控件了,而activity是界面的起点没必要拦截。

1.dispatchTouchEvent()方法

返回值分为 true,false ,还有可以返回 父类的dispatchTouchEvent()方法。而他们三的区别是什么呢? 

①首先 true、false与调用父类dispatchTouchEvent()方法不同的是:父类dispatchTouchEvent()方法中调用了onInterceptTouchEvent()

②其次返回true与false都会让事件终止,不会进行下去。

2.onInterceptTouchEvent()方法

返回值还是可以分为三种true,false,父类onInterceptTouchEvent()方法。

①当返回值为true的时候,表示事件拦截 ,然后调用自己的onTouchEvent()。

②当返回false的时候或者返回父类onInterceptTouchEvent()方法(父类方法默认返回false)表示事件放行,不会调用自己的onTouchEvent()方法。让事件传递下去。

3.onTouchEvent()方法

事件处理方法,通过传过来的MotionEvent ev参数进行事件处理

①返回值为false的时候为在调用自己onTouchEvent()后会调用父类的onTouchEvent().

①返回值为true的时候为在调用自己onTouchEvent()后会不会调用父类的onTouchEvent().表示该方法被自己消费掉。

传递事件顺序图,下一章总结吧...   :)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容