学习Android的同学注意了!!!

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Android学习交流群,群号码:364595326  我们一起学Android!

Android中view的事件传递是从上往下传递的,即事件总是先传递给父元素,然后父元素在把事件分发给子View。

事件分发传递过程中有一个很重要的对象:MotionEvent,MotionEvent有个方法getAction,该方法返回int类型,我们可以从该返回值中判断事件类型,典型常见的有以下三种:

ACTION_DOWN:手指刚点击屏幕时

ACTION_MOVE:手指在屏幕上移动

ACTION_UP:手机离开屏幕

我们把从手指触摸到屏幕开始直到手指离开屏幕所产生的​一系列事件叫做同一事件序列,一个事件序列包含一个ACTION_DOWN、若干个ACTION_MOVE、一个ACTION_UP。

事件的分发过程由三个很重要的方法来共同完成的:

1、public boolean dispatchTouchEvent(MotionEvent event)

View的分发事件,一个View只要能接收到事件,首先执行的是该方法,而且该方法是一定会执行​,这里我们就称它为分发事件。

2、public boolean onInterceptTouchEvent​(MotionEvent event)

View的拦截事件,正常情况下dispatchTouchEvent分发事件会调用该方法,该方法的返回值用以判断当前View是否要拦截该事件,返回true,则当前View的onTouchEvent方法将被调用,并且事件不会传递下去。这里我们需要注意一下,如果一个View决定拦截事件,也就是onInterceptTouchEvent返回true,那么在同一个事件序列的其余事件执行过程中并不会在调用该方法。这里我们就称它为拦截事件。

如果一个View(如TextView,直接继承于View而不是ViewGroup,不能添加子View),那么该View是没有onInterceptTouchEvent方法,而且一旦有事件传递给它,onToucheEvent方法将会被调用,除非设置不可点击的(clickable和longClickable同时设为false);​[备注:activity也没有onInterceptTouchEvent事件]

3、public boolean onTouchEvent(MotionEvent event)

View用来处理点击事件,返回值表示当前View是否消费了该事件,如果事件传递到当前 View 的 onTouchEvent 方法,而该方法返回了 false,那么这个事件会从当前 View 向上传递,并且都是由上层 View 的 onTouchEvent 来接收,而且接收不到下一次事件。换句话说就是:如果没消费,也就是说返回false,那么在同一事件序列的其余事件将不会在传递过来。​

如果一个View设置了onTouchListener事件,那么会先执行onTouchListener,然后根据返回值在判断是否要执行onTouchEvent方法(返回true则不执行onToucheEvent,反之亦然).​​

这里有段伪代码可以把这三个事件的关系表现出来(摘自:android开发艺术):​

public boolean dispatchTouchEvent(MotionEvent event){

    boolean consume = false;

    if(onInterceptTouchEvent(event)){

        consume = onTouchEvent(event);

    }​else{

        consume = child.dispatchTouchEvent(event);​

    }

    return consume;​

}​

相信大家都看得很清楚。

学习Android的同学注意了!!!

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Android学习交流群,群号码:364595326  我们一起学Android!

更多相关文章

  1. Android——全局获取Context
  2. Android(安卓)Automotive 车载应用对驾驶模式(Safe Drive Mode)
  3. Java - android中的枚举类型(Enum)
  4. android简单实例-----------------使用SQLiteOpenHelper以及SQLi
  5. Android中Service组件详解
  6. Android与H5交互框架实践(下)
  7. WebView和JS交互方式
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. 虽然我们怕受到伤害,但我们都非常的爱别人
  2. 找工作不理想,可能是这些原因,致刚出校门的
  3. 不是朋友不够好,而是有些事只能我们自己去
  4. 3种应对忧虑和不确定感的方式
  5. C语言数组(下)
  6. 全部运算符实例-分支与循环-替代语法-文
  7. php运算符,循环分支,文件包含探究
  8. php运算符实例、分支与循环结构、替代语
  9. 第22章 0114-购物车实战与ES6模块化技术,
  10. awk