android的触摸机制
来源:互联网 发布:淘宝双十二承接页装修 编辑:程序博客网 时间:2024/05/29 10:07
dispatchTouchEvent 顾名思义 调用super.dispatchTouchEvent进行touch分发,从activity---->viewGroup--->view 层层分发,
返回true:事件分发完毕,不再分发,子布局、自己的onTouchEvent 也不会执行,之后action会继续出触发dispatchTouchEvent 方法
返回false:没有分发出去,之后action会不会进行
onTouchEvent touch事件的处理 从view--->viewGroup--->activity 层层回调 处理onTouchEvent。是回调方法啊,
返回true:消费掉事件,不再向父控件回调onTouchEvent,dispatchTouchEvent 返回true,接受之后的action
返回false:向父控件回调onTouchEvent,不接受之后的action,例如up,所以onclickListener不会触发
onTouchlistener 参见源码可知,代码在dispatchTouchEvent 中执行,返回true:不会执行onTouchEvent ,
onLongClickListener 当长按的时候,无需到up就会触发onLongClick的响应,但之后也会继续触发onClick的响应,但如果在onLongClick中返回true,则流程如下,即只在中间触发了onLongClick,之后会继续响应touch,但当up的时候就不会再触发onClick
onClickListener 参见源码可知,onClick的触发是在onTouchEvent回调中来实现的,把onTouchEvent回调中的super.onTouchEvent去除,直接返回true,则onClick不会执行。
setEnable 总开关,true:控件处于活动状态。
false:永远不活动,不能onclick,因为onclick事件在onTouch中的ACTION_UP执行,如果disable,则return,不会放下执行。
if ((viewFlags & ENABLED_MASK) == DISABLED) { if (event.getAction() == MotionEvent.ACTION_UP && (mPrivateFlags & PFLAG_PRESSED) != 0) { setPressed(false); } // A disabled view that is clickable still consumes the touch // events, it just doesn't respond to them. return (((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)); }
setOnclick CLICKABLE 决定onTouchEvent 返回值。
CLICKABLE ==true,事件被消费,onTouchEvent返回 true
CLICKABLE ==false,事件未被消费,onTouchEvent返回 false
综合得出Android View的触摸屏事件传递机制有如下特征:
- 触摸控件(View)首先执行dispatchTouchEvent方法。
- 在dispatchTouchEvent方法中先执行onTouch方法,后执行onClick方法(onClick方法在onTouchEvent中执行,下面会分析)。
- 如果控件(View)的onTouch返回false或者mOnTouchListener为null(控件没有设置setOnTouchListener方法)或者控件不是enable的情况下会调运onTouchEvent,dispatchTouchEvent返回值与onTouchEvent返回一样。
- 如果控件不是enable的设置了onTouch方法也不会执行,只能通过重写控件的onTouchEvent方法处理(上面已经处理分析了),dispatchTouchEvent返回值与onTouchEvent返回一样。
- 如果控件(View)是enable且onTouch返回true情况下,dispatchTouchEvent直接返回true,不会调用onTouchEvent方法。
- 当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发下一个action(也就是说dispatchTouchEvent返回true才会进行下一次action派发)。
参考:Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()
Android触摸屏事件派发机制详解与源码分析一(View篇)
Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)
Android触摸屏事件派发机制详解与源码分析三(Activity篇)
- android的触摸机制
- android触摸事件的分发机制、冒泡机制、消费机制
- Android的触摸(Touch)机制
- Android进阶- 触摸事件的分发机制
- Android进阶- 触摸事件的分发机制
- Android View的触摸事件机制
- Android触摸事件的分发机制
- Android 触摸事件的机制和原理
- Android触摸事件机制
- Android触摸事件机制
- Android触摸事件机制
- Android触摸机制
- Android事件触摸机制
- 触摸事件的机制
- [Android进阶笔记]Android触摸事件的拦截机制
- android 的触摸事件的分发拦截机制分析
- Android 触摸事件传递机制
- android屏幕触摸事件机制
- localStorage和sessionStorage详解
- oracle合并列的wm_concat函数
- Sphinx命令行工具
- hashmap碰撞 造成的死循环
- 一球从100米高度自由落下
- android的触摸机制
- C/C++不同文件夹下包含头文件的方法及#include的使用
- C/C++之回调函数---函数指针的作用
- Linux字符设备驱动框架
- C# StringBuilder
- Webdriver配合Tesseract-OCR 自动识别简单的验证码
- VS2013开发QT时提示很多未定义标识符(不影响编译)
- PCIe学习笔记(1)---PCI相关
- 【安装】maven安装配置&教程