Android事件分发

Touch事件的相关方法

dispatchTouchEvent        事件分发
onInterceptTouchEvent       事件拦截
onTouchEvent           事件响应

拥有事件方法的类

1 . Activity
  dispatchTouchEvent、onTouchEvent
2 . ViewGroup类(LinearLayout、FrameLayout、ListView等.....)
  dispatchTouchEvent、onInterceptTouchEvent 、onTouchEvent
3、View类(Button、TextView等.....)
  dispatchTouchEvent、onTouchEvent

事件方法简单用途解析

我们可以发现这三个方法的返回值都为boolean类型,其实它们就是通过返回值来决定下一步的传递处理方向。

1、dispatchTouchEvent() ——用来分发事件所用

该方法会将根元素的事件自上而下依次分发到内层子元素中,直到被终止或者到达最里层元素,该方法也是采用一种隧道方式来分发。在其中会调用onInterceptTouchEvent()和onTouchEvent(),一般不会去重写。

返回false则不拦截继续往下分发,如果返回true则拦截住该事件不在向下层元素分发,在dispatchTouchEvent()方法中默认返回false。

2、onInterceptTouchEvent() ——用来拦截事件所用

该方法在ViewGroup源代码中实现就是返回false不拦截事件,Touch事件就会往下传递给其子View。

如果我们重写该方法并且将其返回true,该事件将会被拦截,并且被当前ViewGroup处理,调用该类的onTouchEvent()方法。

3、onTouchEvent() ——用来处理事件

返回true则表示该View能处理该事件,事件将终止向上传递(传递给其父View)

返回false表示不能处理,则把事件传递给其父View的onTouchEvent()方法来处理

事件分发流程
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容