view事件分发机制
来源:互联网 发布:网络病毒营销的前提 编辑:程序博客网 时间:2024/04/29 12:30
参考:(http://blog.csdn.net/lmj623565791/article/details/38960443)
【总结】以button为例,
1、点击button(略微滑动一下)的过程中依次执行:
View.dispatchEven()——>View.onTouchListener()—->View.onTouchEven();
在dispatchEven()源码中进行判断onTouchListener是否为空且为true,如果在button.setOnTouchListener()方法中设置的return 值为true 则不再执行*view的onTouchEven方法。设为false则执行。重点内容*
相关源码:
/** * Pass the touch screen motion event down to the target view, or this * view if it is the target. * * @param event The motion event to be dispatched. * @return True if the event was handled by the view, false otherwise. */ public boolean dispatchTouchEvent(MotionEvent event) { if (!onFilterTouchEventForSecurity(event)) { return false; } if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && mOnTouchListener.onTouch(this, event)) { return true; } return onTouchEvent(event); }
2、在even从DOWN到MOVE到UP的过程中,通过两个标识判断是点击还是长按操作——PREPRESEED、PRESSEED。如果点击时间小于115毫秒或处于 115ms到 500ms之间会执行onClick方法;如果大于500ms 则有两种情况:
如果有OnLongClick方法,则执行长按方法,如果该方法内返回true则不再执行onCLick方法;
如果没有OnLongClick方法或return 的是false则 会触发onClick方法。
Touch事件的ACTION_DOWN -> ACTION_UP -> OnClick/OnLongClick。
**该View是怎么响应这个点击动作的呢?** 首先,该View会先响应ACTION_DOWN事件,并返回一个boolean值,这里有两种判断: a:返回True,表示该View接受此按下动作,就是说这个点击动作的按下操作被中止,然后就是响应ACTION_UP事件。点击动作的按下操作被ACTION_DOWN接受之后就结束了,所以之后的OnClick/OnLongClick事件就不会响应了。 b:返回false,表示该View不接受此按下动作,响应完之后,按下操作继续往下发,之后是响应ACTION_UP事件,这里又有一个判断:
如果ACTION_UP事件返回True,表示ACTION_UP接受松开操作,松开操作中止;View会一直处于按下状态,之后View便会响应OnLongClick事件。
如果ACTION_UP事件返回false,表示ACTION_UP不接收松开操作,松开操作继续下发;因为按下与松开操作都没有被中止,所以之后View就会响应OnClick事件。
- view 事件分发机制
- View 事件分发机制
- View事件分发机制
- view事件分发机制
- View事件分发机制
- view事件分发机制
- view事件分发机制
- view事件分发机制
- View事件分发机制
- View 事件分发机制
- View事件分发机制
- View事件分发机制
- view 事件分发机制
- View事件分发机制
- View事件分发机制
- View事件分发机制
- view 事件分发机制
- view事件分发机制
- Objective-C @encode关键字
- 错误: 需要class, interface或enum
- JAVA数据结构---二叉树入门
- 中缀表达式转后缀表达式的方法
- 从拨号音分析拨号号码
- view事件分发机制
- Quartz SimpleTrigger Demo
- 饿了么移动APP的架构演进
- 使用Glide加载图片的时候报错
- servlet 中bean注入
- 到设定的时间让程序退出登录
- linux系统下运行aapt
- iO7以上CIFilter生成二维码
- 浏览器滚动条触底时出发事件