android事件分发学习
来源:互联网 发布:python 风控规则引擎 编辑:程序博客网 时间:2024/06/05 12:00
android事件分发学习
很久没有记录博客了,感觉看的很多但是记录的确实挺少,最近系统的看了关于事件分发的模块的内容,记录一下自己的学习轨迹
- 所有的事件的传递分为三个阶段
- 分发(Dispatch)对应事件dispatchTouchEvent
- 拦截(Intercept)对应事件onInterceptTouchEvent
- 消费(Consume)对应着onTouchEvent方法
dispatchTouchEvent方法
- 存在于ViewGroup及其子类中,当返回true时候便表示当前视图被消费掉,返回super会继续分发事件
- 如果当前视图是viewGroup还会调用onInterceptTouchEvent方法,如果返回super和false则不会拦截
onInterceptTouchEvent方法
- 这个方法只存在于viewGroup及其子类中,在view和acvity中是不存在的,返回true表示拦截,其他表示不进行拦截
onTouchEvent方法
- 返回值为false时候表示当前视图不处理这个时间同时将时间传回父控件进行处理,将会调用父类控件的onTouchEvent进行处理
不同类的持有的方法分类
- 不同事件处理如下 :
- Activity
- dispatchTouchEvent
- onTouchEvent
- ViewGroup
- dispatchTouchEvent
- onInterceptTouchEvent
- dispatchTouchEvent
- View
- dispatchTouchEvent
- onTouchEvent
总结
- 所有的事件都是从当前activity进行传递,通过 dispatchTouchEvent进行判断,如果满足super则进行分发,同时下发给每一个viewGroup,每一个viewGroup对自己的子控件进行事件的分发,同时viewGroup可以进行事件的拦截,当所有的子控件返回super或者false时候,则事件将会向外传递,调用父类控件的onTouchEvent,如果还是false将会调用activity的onTouchEvent。
最后附上 群主的总结,如果喜欢也可以去看他的博客:android 事件分发
触摸控件(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->onTouch->onTouchEvent->onClick
阅读全文
0 0
- Android事件分发学习
- android事件分发学习
- Android事件分发机制学习
- Android学习笔记 Android事件分发
- android学习笔记---事件分发机制(上)
- android学习笔记---事件分发(下)
- Android事件分发机制学习笔记
- Android事件分发机制学习笔记
- Android Touch事件分发机制学习
- Android事件分发机制学习笔记
- Android事件分发机制学习和总结
- 关于Android 事件分发机制的学习
- Android事件分发机制---学习笔记
- 更简单的学习Android事件分发
- 更简单的学习Android事件分发
- android源码学习-事件分发处理机制
- android事件分发机制的再学习
- 【Android源码学习】事件分发机制
- ubuntu调整鼠标灵敏度
- crond和crontab调研
- edittext突然丢失焦点
- logging TimedRotatingFileHandler不支持多进程
- MongoDB数据库聚合
- android事件分发学习
- Oracle start with connect by prior 递归查询用法
- LeetCode刷题【Array】Minimum Size Subarray Sum
- 前后端分离开发的方法(Mockjax)
- spring 静态资源访问
- 怎样在Web.config定义变量值,并且从程序怎么获取值?
- 插入千万级别的Mysql数据
- adb安装apk到指定设备
- 关于eclipse部署项目后,在tomcat中的webapps文件夹下没有项目