有段时间没有写博客了,以前总是感觉对Android中的事件传递机制有着相对模糊的理解,今天抽空静心详细看了看。:

  • 前言
  • 主要方法
  • 流程详解
  • 前文

    总觉得知识必要要总结,不然就算再熟悉的东西,一段时间不接触就容易遗忘。
    Android中的触摸事件传递机制最重要的是是dispatchTouchEvent(),onInterceptTouchEvent()以及onTouchEvent()方法。
    touch事件首先会传递到Activity,然后传递到ViewGroup,再到具体的View.

  • 主要方法

dispatchTouchEvent():处理事件的分发,事件多数情况下是由Activity的dispatchTouchEvent开始。

onInterceptTouchEvent():处理事件的拦截,由ViewGroup()提供,意味着在activity中你不能够重写此方法。

onTouchEvent():触摸事件的处理。

  • 流程详解

    1,Touch事件的传入
    开始会由Activity接收事件,接下来事件会传递至Activity的dispatchTouchEvent(),这里默认情况下会是调用

    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        return super.dispatchTouchEvent(ev);    }

查看父类的super.dispatchTouchEvent:

    /** * Called to process a key shortcut event. * You can override this to intercept all key shortcut events before they are * dispatched to the window. Be sure to call this implementation for key shortcut * events that should be handled normally. * @return True if this event was consumed. */public boolean dispatchTouchEvent(MotionEvent ev) {    if (ev.getAction() == MotionEvent.ACTION_DOWN) {        onUserInteraction();    }    if (getWindow().superDispatchTouchEvent(ev)) {        return true;    }    return onTouchEvent(ev);}

这里判断条件第一个方法是个空方法,第二个判断条件是系统默认的事件分发机制。所以在activity中,如果手动修改dispatchTouchEvent的返回值,那么事件就会被消费,不在往里传递。

2,从Activity传入外层的ViewGroup

经历了Activity传入事件,第一个走的还是dispatchTouchEvent(),如果手动修改了返回值,事件到此终止,如果使用父类的super.dispatchTouchEvent,那么事件就会传递至onInterceptTouchEvent(),
- 在onInterceptTouchEvent中,:是否拦截本次事件传递

1, return true :那么事件会传递至viewGroup的onTouchEvent中。在   onTouchEvent中,:return true   事件被消费:return false  表示viewGroup当中的子控件都不想消费,那么它会直接把本次事件往回传,传至activity中去处理。2return false: 表示ViewGroup不想拦截,那么事件会继续下发至View

3,事件传递至ViewChild中

dipatchTouchEvent:还是和上面的一样,还是决定是否分发事件,系统的逻辑会自动运行到自己onTouchEvent方法中,如果你主动干预,决定是否分发(手动更改返回值),事件到这里就会终结.

onTouchevent:逻辑和之前的一样,问你是否消费本次事件,

return true :表示消费本次事件,事件结束return false:表示不消费本次事件,事件会回传给外一层控件,return super.onTouchEvent(event):是否消费本次事件就要看自己控件类型了(Text,Buttond等,是否消费跟类型有关)

更多相关文章

  1. android XML解析技术
  2. Android中的Context
  3. 【自动化测试】Android(安卓)Monkey实践
  4. 更简单的学习Android事件分发
  5. 【Android】实现XML解析的几种技术
  6. Android中的Context
  7. Handler Looper源码解析(Android消息传递机制)
  8. Android中解析XML
  9. Android桌面小部件AppWidget(1)

随机推荐

  1. Android折线图
  2. Android创建jar包的步骤
  3. android MediaRecorder 视频录制
  4. Android debugging using Lauterbach Tra
  5. android调用系统分享
  6. Ubuntu 14.04 配置Android编译环境
  7. Android获取手机内存
  8. Android使用HttpURLConnection上传文件
  9. Android属性动画初步
  10. Android实现各种对话框的变体