Android的事件传递机制
来源:互联网 发布:淘宝订单编号有规律吗 编辑:程序博客网 时间:2024/05/17 09:11
最近在看《Android高级进阶》,其中对事件的传递机制讲述的很清楚,以此文章作为读书笔记记录。
事件传递的三个阶段
1.事件的分发:
dispatchTouchEvent方法:决定是直接消费这个事件还是将事件继续分发给子视图。
public boolean dispatchTouchEvent(MotionEvent event)
方法返回值:
2.事件的拦截:
onInterceptTouchEvent方法:只在ViewGroup及其子类中存在,表示对事件进行拦截。
public boolean onInterceptTouchEvent(MotionEvent event)
方法返回值:
3.事件的消费:
onTouchEvent方法:表示对事件的消费。
public boolean onTouchEvent(MotionEvent event)
方法返回值:
4.总结:
View的事件传递机制
定义一个继承TextView的类MyTextView,定义一个MainActivitiy展示MyTextView,为MyTextView设置onClick和onTouch监听,ACTION_DOEN事件的处理流程如下所示:
总结:
1.触摸事件的传递流程是从diapatchTouchEvent开始的,如果不进行人为干预也就是默认返回父类的同名函数,则事件将会依照嵌套层次从外层向内层传递,到达最内层的view时,由它的onTouchEvent方法处理,该方法如果能够消费该事件,则返回ture,如果处理不力,则返回false,这时事件会重新向外层传递,并由外层View的onTouchEvent方法进行处理,以此类推。
2.如果事件在向内层传递过程中由于人为干预,事件处理函数返回true,则会导致事件提前被消费掉,内层View将不会收到这个事件。
3.View控件的事件触发顺序是先执行onTouch方法,在最后才执行onClick方法(因为查看源码可知dispatchTouchEvent方法->onTouch->onTouchEvent->performClick里面执行onclick)。如果onTouch返回true,则事件不会继续传递,最后也不会调用onClick方法;如果onTouch返回false,则事件继续传递。
ViewGroup的事件传递机制
自定义一个ViewGroup,继承RelativeLayout为MyRelativeLayout,将Layout作为MyTextView的容器,事件流程如下图所示:
总结:
1.触摸事件的传递顺序是由Activity到ViewGroup,再由ViewGroup递归传递给它的子View。
2.ViewGroup通过onInterceptTouchEvent方法对事件进行拦截,如果该方法返回ture,则事件不会传递给子VIew,如果返回false或者superInterceptTouchEvent,则事件会传递给子View。
3.在子View中对事件进行消费后,ViewGroup将接收不到任何事件。
- Android的事件传递机制
- Android事件的传递机制
- Android 事件的传递机制
- Android 事件的传递机制
- Android事件的传递机制
- Android的事件传递机制
- android的事件传递机制
- Android的事件传递机制
- Android的事件传递机制
- Android的事件传递机制
- android 事件传递机制
- android 事件传递机制
- android事件传递机制
- Android事件传递机制
- Android 事件传递机制
- Android事件传递机制
- Android事件传递机制
- Android事件传递机制
- react native mac下环境搭建
- eclipse向mysql插入信息乱码问题
- ES6 解构赋值
- 配置虚拟域名&让别人访问自己本地的项目
- pdist
- Android的事件传递机制
- 对JAVA序列化的理解(serialVersionUID的作用)
- php get/post 提交数据
- cmake & catkin_make安装到指定目录
- 数据结构入门学习系列-4(线性表的链式存储)
- 17102001_systemd的运行级别与服务管理命令简介
- js的一些零碎知识点
- iOS面试-第一节
- 模式识别分类器评价指标之ROC曲线