onTouch事件的传递机制

来源:互联网 发布:男包品牌 知乎 编辑:程序博客网 时间:2024/06/05 18:13

onTouch事件的传递机制

一、点击事件传递机制:

  • 1.view执行dispatchTouchEvent 方法,开始分发事件,返回值决定是否分发出去
  • 2.执行onInterceptHoverEvent 方法,判断是否中断事件,返回值决定是否传递给子View
  • 3.执行onTouchEvent 方法,处理事件,返回值告知系统event事件是否被消费

二、流程图

1.Touch事件分发(dispatchTouchEvent)流程图:

dispatchTouchEvent

2.Touch事件传递机制(onInterceptHoverEvent)流程图:

onInterceptHoverEvent

3.Touch事件处理(onTouchEvent)流程图:

onTouchEvent

三、和onTouch有关的方法

/** * 分发事件的方法,最早执行 * @param ev 事件 * @return 返回boolean值,true表示消息被分发出去 */@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {    return super.dispatchTouchEvent(ev);}/** * 是否中断事件的传递 * 点击事件从view最外层传入内层 * * @param event 事件 * @return result 返回true时,中断事件,执行自己的onTouchEvent方法 * 返回false时,默认处理,不中断,也不会执行自己的onTouchEvent方法 */@Overridepublic boolean onInterceptTouchEvent(MotionEvent event) {    return super.onInterceptTouchEvent(event);}/** * 点击事件解析处理 * * @param event * @return boolean值,true表示该事件被消费 */@Overridepublic boolean onTouchEvent(MotionEvent event) {    return super.onTouchEvent(event);}

四、在View,ViewGroup,Activity中以上方法的存在情况是不同的

下图奉上View及其子类的继承关系:
View及其子类

1.在View类中有下面两种:

dispatchTouchEvent(MotionEvent ev);    onTouchEvent(MotionEvent ev);

2.在ViewGroup(布局管理器是ViewGroup的子类,所以也继承了这三种方法)中有以上三种方法:

dispatchTouchEvent(MotionEvent ev);    onInterceptTouchEvent(MotionEvent ev);    onTouchEvent(MotionEvent ev); 

3.在Activity中有两种:

dispatchTouchEvent(MotionEvent ev);    onTouchEvent(MotionEvent ev);

五、从屏幕点击到事件的消费流程如下图:

onTouch

常用的MotionEvent事件:

  • ACTION_DOWN = 0
  • ACTION_UP = 1
  • ACTION_MOVE = 2
  • ACTION_CANCEL = 3
原创粉丝点击