美文网首页
事件分发探究

事件分发探究

作者: 墨源为水 | 来源:发表于2021-02-01 11:44 被阅读0次

1.dispatchTouchEvent(MotionEvent ev)用于事件分发,将触摸事件向下传递给目标视图,如果它本身就是目标视图,则传递给自己来处理事件。返回结果受自己的 onTouchEvent 和下级 View 的 dispatchTouchEvent 方法影响。

2.onInterceptTouchEvent(MotionEvent ev)用于ViewGroup的是否拦截事件的处理,其中:
返回 false ,则代表不拦截事件;如果返回事件为 true,则拦截事件,并且此事件的后续事件都交给自己来处理,不会再调用此方法询问是否拦截。

3.onTouchEvent(MotionEvent ev)用于View的是否消费事件的处理,其中:
返回 true 代表消费事件;返回 false 代表不消费事件。

三者关系大致如下:

public boolean dispatchTouchEvent(MotionEvent ev){
    boolean consume;
    if(onInterceptTouchEvent(ev)){
        consume = onTouchEvent(ev);
    }else{
        consume = childView.dispatchTouchEvent(ev);
    }
    return consume ;
} 

4.事件传递是从activity到ViewGroups再到target view,形象上可以这么理解,摸了树叶,整个事件流从树根root,到树枝,再到具体的那个树叶。

5.消费事件与拦截事件是两个不同概念,事件流到你这里,消不消费不影响它的流向。onTouchEvent return true,不影响事件流继续流淌。onInterceptTouchEvent return true才会阻截事件流淌。不过需要注意的是:

1.如果一个控件不消费传递过来的 DOWN 事件,那么后续事件不会传递给它。
2.如果一个点击区域的所有控件都不消费事件,那么这个事件最终会传递个 Activity 。
3.ViewGroup 一旦拦截事件后,后续事件就会交给它来处理,并且不会再调用 onInterceptTouchEvent 方法询问是否拦截。

6.requestDisallowInterceptTouchEvent

请求父控件不要拦截事件。属于 ViewParent 的方法,ViewParent是一个接口,ViewGroup 实现了 ViewParent 接口。

注意: View 调用 requestDisallowInterceptTouchEvent 请求父控件不拦截生效有意义的前提是: View接收到了 DOWN 事件,并且消费了 DOWN 事件。如果一个控件不消费 DOWN 事件,那么后续事件也不会传递给它。

相关文章

  • 事件分发探究

    1.dispatchTouchEvent(MotionEvent ev)用于事件分发,将触摸事件向下传递给目标视图...

  • Android探究事件分发

    以前没太注意,很久没用之后再使用发现有些地方模糊了,就是那种不知道是对是错的感觉,然后又要重复上网去找资料,所以打...

  • iOS事件分发机制介绍与应用

    iOS事件分发机制介绍与应用 打开某App点击登录按钮后弹出登录页面。这是一个事件分发与响应的示例。我们来探究下该...

  • View绘制流程及事件分发

    事件分发相关 1、事件分发流程 ViewGroup的事件分发 View的事件分发 View和ViewGroup的O...

  • Activity 对点击事件的分发机制

    ViewGroup对点击事件的分发机制View 对点击事件的分发机制 事件分发流程概述 注:Android事件分发...

  • 事件分发机制总结

    事件分发 所谓事件,就是点击事件,即MitionEvent对象;事件分发,就是对MotionEvent事件的分发过...

  • 4.2View相关-事件分发机制详解

    事件分发机制 为什么会有事件分发机制 三个重要的事件分发的方法 事件分发流程 1.为什么会有事件分发机制 andr...

  • View的事件分发

    View的事件分发分View和ViewGroup的事件分发 View的事件分发 View的事件分发主要是三个方法 ...

  • 性能优化~缓存机制-事件分发

    事件分发 事件分发主要涉及三个方法: dispatchTouchEvent-事件分发; onInterceptTo...

  • 事件分发流程

    事件分发流程 事件分发对于MontionEvent事件分发。 三个重要方法 dispatchTouchEnent用...

网友评论

      本文标题:事件分发探究

      本文链接:https://www.haomeiwen.com/subject/tttogktx.html