android 的事件分发从源码分析
来源:互联网 发布:雷霆网络 倚天解压码 编辑:程序博客网 时间:2024/06/07 01:54
转载请注明出处:http://blog.csdn.net/onlybeyond99/article/details/50680907 挨踢人one
一、事件分发
1、三个事件 dispatchEventTouch()、OnTouchEvent()、OnInterceptTouchEvent()
OnInterceptTouchEvent只有容器才有普通的view和Activity 都没有
dispatchEventTouch()down,move,up事件都会调用
2、dipatchEventTouch()的传递原理:
view中dispatchTouchEvent()
public boolean dispatchTouchEvent(MotionEvent event) {
if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && mOnTouchListener.onTouch(this, event)) {
return true;
}
return onTouchEvent(event); }
viewGroup中的dispatchTouchEvent()主要方法
public boolean dispatchTouchEvent(MotionEvent ev) {
.
.
.
boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;if (action == MotionEvent.ACTION_DOWN) {if (disallowIntercept || !onInterceptTouchEvent(ev)) {// 如果disallowIntercept和!onInterceptTouchEvent(ev)两者有一个为true,就会进入到//这个条件判断中。disallowIntercept是指是否禁用掉事件拦截的功能,默认是false,也可以//通过调用requestDisallowInterceptTouchEvent方法对这个值进行修改。。。。代码功能:调用子控件的dipatchTouchEvent()方法。}}final View target = mMotionTarget;
if (target == null) {ev.setLocation(xf, yf);if ((mPrivateFlags & CANCEL_NEXT_UP_EVENT) != 0) {ev.setAction(MotionEvent.ACTION_CANCEL);mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT;}return super.dispatchTouchEvent(ev);} //如果target为空,没有子控件消费时间,调用super.dispatchTouchEvent(ev)即view的 dispatchTouchEvent() 里面包含onTouch,onClick,onTouchEvent();}
view中的dipatchEventTouch()方法代码
3、Ontouch()和onTouchEvent(),onclick()点击事件
onTouch()是一个接口里面的方法。 可由setOnTouchListener()设置
onTouchEvent() 事件响应方法,属于控件里面的方法在dispatchEventTouch()方法中调用,后于onTouch()
onClick点击事件()在onTouchEvent()中调用。一些控件默认有这个事件,如按钮
4、getParent().requestDisallowInterceptTouchEvent(false);父容器不拦截事件用途,解决下拉刷新中下拉viewPager刷新重写viewPager的dispathTouchEvent()方法if(y移动的距离大于x移动的距离){getParent().requestDisallowInterceptTouchEvent(false);允许父容器拦截return super.dispatchTouchEvent(ev);}能够起作用的原理,再次调用的dispatchTouchEvent()父容器能否拦截事件的状态就变了独学而无友,则孤陋而寡闻!分享知识,交流技术,碰撞思想。
0 1
- android 的事件分发从源码分析
- android 从源码分析ViewGroup事件分发
- 源码分析android的事件分发机制
- Android 从源码分析 Android 触摸事件分发过程
- 从系统源码角度分析Android事件分发
- android 从源码分析view事件分发机制
- Android 从源码角度分析事件分发机制(三)
- 从源码角度分析android事件分发处理机制
- 从源码角度分析android事件分发处理机制
- Android事件分发源码分析
- Android事件分发源码分析
- Android事件分发源码分析
- 从源码的角度分析ViewGruop的事件分发
- 从源码的角度分析ViewGruop的事件分发
- Android应用开发原理之从ViewGroup源码分析ViewGroup的事件分发机制
- View的事件分发机制,从源码角度分析一下
- Android的事件分发源码分析,告别事件冲突。
- 从源码解释Android事件分发机制
- 编译器预定义宏概述
- 如何一分钟实现滑动菜单特效
- fedora20 安装搜狗输入法及各种问题的解决
- 使用sqlite3模块访问SQLite数据库
- java后台图片大小压缩
- android 的事件分发从源码分析
- 朴素贝叶斯
- 安装 Fedora 22 后要做的13件事
- 如何看linux文件系统类型及挂载硬盘命令
- 欢迎使用CSDN-markdown编辑器
- 下一代游戏开发平台MaxPlay介绍
- practical-vim 读书笔记
- 我要造轮子之IoC和依赖注入
- 3 图形初阶