一次完整的事件传递主要包括三个阶段,分别是事件的分发、拦截、和消费。

事件传递的三个阶段

  • 分发(dispatch)
    事件分发对应dispatchTouchEvent方法,在安卓系统中,所有的触摸事件都是通过这个方法来分发的

public boolean dispatchTouchEvent(MotionEvent ev)
方法返回true代表事件被当前视图消费掉,不再继续分发事件。方法返回值为super.dispatchTouchEvent表示继续分发该事件,如果当前视图是ViewGroup及其子类,则会调用onInterceptTouchEvent方法判定是否拦截该事件.

  • 拦截
    事件拦截对应着onInterceptTouchEvent方法,这个方法只在viewgroup及其子类中存在,在view和activity中是不存在的.

public boolean inIntercepterTouchEvent(MotionEvent ev)

true表示拦截这个时间,不继续分发给子视图,同时交由自身的onTouchEvent方法进行消费,返回false或者super.onInterceptTouchEvent 表示不对事件拦截,需要继续传递给子视图

  • 消费
    时间的消费对应着onTouchEvent方法,方法原型如下:

public boolean onTouchEvent(MotionEvent event)
该方法返回值为true表示当前视图可以 处理对应的时间,事件将不会向上传递给父视图,返回值为false表示当前视图不处理这个事件,时间会被传递给俯视图的onTouchEvent 方法进行处理

更多相关文章

  1. WindowManger与window之基础篇
  2. Android(安卓)实现按钮在没有触摸事件时几秒钟之后自动隐藏
  3. EventBus3 简单使用及注意点
  4. Android(安卓)View.onMeasure方法的理解
  5. 【android】利用getViewTreeObserver().addOnGlobalLayoutListen
  6. android错误之ListView设置setOnItemClickListener失效
  7. [转]Android中两种设置全屏的方法
  8. Activity的onConfigurationChanged事件
  9. Android(安卓)屏幕(View)坐标系统

随机推荐

  1. OkHttp+Stetho+Chrome调试android网络部
  2. Android一些常用知识和代码(不断更新)
  3. Android检测手机是否插入/连接耳机
  4. 清除Android工程中没用到/未用到的资源
  5. 46、PopWindow工具类
  6. Android之博客案例 及 获取指定URL的网页
  7. 0324安卓如何设置标题栏颜色
  8. android微信付费
  9. android手势操作滑动效果触摸屏事件处理
  10. ARouter配置纪要