android触摸事件分发与处理

android的分发机制:由父控件判断是否拦截,如果不拦截事件,则继续分发到子控件,然后一直分发下去。

处理:与分发相反,由子控件先处理事件,如果子控件不处理,则交给父控件处理,一直向上传递,直到那个控件处理了触摸事件

相关方法:

Boolean dispatchTouchEvent(MotionEvent ev)接收到触摸事件时,是否分发事件到下面的view,返回true分发触摸事件;不分发返回false,下面的view就拿不到事件

Boolean onInterceptTouchEvent(MotionEvent ev)接收到触摸事件时,是否拦截事件,返回true拦截,则调用onTouchEvent方法处理事件;返回false,继续向子控件传

Boolean onTouchEvent(View v,MotionEvent event)是否响应事件,返回true,响应;返回false不响应

这个方法是基于回调的

Boolean onTouch(View v,MotionEvent event)处理响应事件,当view调用了setOnTouchListener方法设置了触摸监听器,则事件响应的时候先调用onTouch方法
返回true,响应即事件被v消费onTouchEvent方法不执行;返回false时,不响应事件没有被消费而终止了,并调用onTouchEvent方法
这个方法是基于监听onTouchListener 的

void requestDisallowInterceptTouchEvent(Boolean disallowIntercept)请求父控件是否不拦截事件,返回true,不允许父控件的onInterceptTouchEvent调用;false 允许

事件是否被拦截,要看在当前父级阶段能否根据event事件找到消费此事件的控件,如果找到则返回true继续向下分发,否则处理

更多相关文章

  1. Android多进程app中Application回调onCreate()方法被执行多次分
  2. 【转】Ubuntu下Adb调试Android找不到设备的解决方法
  3. [读书笔记]布局的屏幕适配常用方法
  4. 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬
  5. Android中触摸事件传递机制
  6. IOS/Android 移动端原生及自定义控件开发集v0.1
  7. Android使用JNI生成.so文件并调用(使用传统生成.h的方法)
  8. Android自定义控件——仿ios开关按钮

随机推荐

  1. Mysql 5.6 "隐式转换"导致的索引失效和数
  2. mysql json格式数据查询操作
  3. 解决MySQL读写分离导致insert后select不
  4. mysql innodb的重要组件汇总
  5. 详解mysql持久化统计信息
  6. Go 和 Android(安卓)集成实战
  7. Android(安卓)之 Window、WindowManager
  8. Android深入浅出之Audio第三部分Audio Po
  9. android仿网易云音乐引导页、仿书旗小说F
  10. 范例解析:学习Android的IPC主板模式