view传递事件的处理机制(自定义了viewGroup和LinearLayout做实验)
来源:互联网 发布:欧洲卡车模拟2设置优化 编辑:程序博客网 时间:2024/05/20 11:36
最近为了明白view时间处理传递机制,特此了做了实验,自定义了viewGroup和LinearLayout做实验,重写了dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent三个方法,总结了四种情况。
事先在脑袋里有这么一些概念:
ACTION_DOWN //表示按下了屏幕
ACTION_MOVE //表示为移动手势
ACTION_UP //表示为离开屏幕
ACTION_CANCEL //表示取消手势,不会由用户产生,而是由程序产生的
一个Action_DOWN, n个ACTION_MOVE, 一个ACTION_UP,就构成了Android中众多的事件
ViewGroup类的控件嵌套时事件触发情况、
0. dispatchTouchEvent()//事件的分发,方法是从父View向子View传递
1. onInterceptTouchEvent() //是否中断事件的传递,如果返回true,则把事件给当前view的onTouchEvent()方法,方法是从父View向子View传递
2. onTouchEvent() //接收事件并处理,从子View向父View传递
//返回值为true表示事件被正确接收和处理了,返回值为false表示事件没有被处理,将继续传递下去。
屏幕view布局:
接着分析四种情况:
情况一:当所有的都不进行处理的时候即返回false ,每个方法里面的 log打印,作为对比参照物。
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.onInterceptTouchEvent
CustomerLinearLayout.dispatchTouchEvent
CustomerLinearLayout.onInterceptTouchEvent
CustomerLinearLayout.onTouchEvent
CustomerViewGroup.onTouchEvent
情况二:当CustomerViewGroup.onInterceptTouchEvent()放回true 的时候,对比情况一,那就说明CustomerViewGroup中断了
事件的传递,他当前的响应交由onTouchEvent()处理,而不往下传递给CustomerLinearLayout,
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.onInterceptTouchEvent
CustomerViewGroup.onTouchEvent
情况三:CustomerViewGroup.dispatchTouchEvent()返回true的时候说明事件不分发,自己方法处理了,对比情况一,就知道CustomerViewGroup.onInterceptTouchEvent
都没有响应了。
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.dispatchTouchEvent
情况四:onTouchEvent(),这个方法比较特殊,和dispatchTouchEvent(),onInterceptTouchEvent()方法不同的是他是
子view往上传递的,意思就说,所有的view一级一级的dispatchTouchEvent(),onInterceptTouchEvent()都是返回false
那么也就是把事件传递到最底层的view,最底层的view中的onTouchEvent()如果返回true,那么就是代表响应,事件就会
这个方法消耗,如果返回false,那么久代表事件没有被处理,那么又会返回到上层父view,直到被处理了。
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.onInterceptTouchEvent
CustomerLinearLayout.dispatchTouchEvent
CustomerLinearLayout.onInterceptTouchEvent
CustomerLinearLayout.onTouchEvent
CustomerViewGroup.dispatchTouchEvent
CustomerViewGroup.onInterceptTouchEvent
CustomerLinearLayout.dispatchTouchEvent
CustomerLinearLayout.onTouchEvent//上面可以看到CustomerViewGroup.onTouchEvent都不打印了也就是说消耗了事件
- view传递事件的处理机制(自定义了viewGroup和LinearLayout做实验)
- Android ViewGroup和View的传递事件
- ViewGroup和View的事件传递原理
- View和ViewGroup的事件拦截机制
- ViewGroup和View的事件分发机制
- [Android 分享] View 和 ViewGroup 事件传递机制
- ViewGroup的事件传递机制
- view、viewgroup 事件响应拦截处理机制
- 不是单纯的对图片做模糊处理而是自定义了LinearLayout 和RelativeLayout
- View和ViewGroup的事件分发机制详解
- ViewGroup事件传递机制
- ViewGroup事件传递机制
- Android View 和 ViewGroup 事件分发机制
- 自定义View事件拦截机制(自定义viewGroup和外部法解决滑动冲突)
- 深入探索 ViewGroup 的事件传递机制
- ViewGroup与View的事件分发机制
- Android中事件处理机制之——ViewGroup的事件传递详解(一)
- View以及ViewGroup的事件处理流程
- 2080用的Floy果断超时,留个纪念哦.cpp
- 1869最短路径,弗洛伊的算法.cpp
- ADO与SQL sever的使用【今天休息一天,因为:停电了!!】
- 详细解说 STL 排序(Sort)
- ARM 汇编的冒泡程序
- view传递事件的处理机制(自定义了viewGroup和LinearLayout做实验)
- arcgis server for flex 编程时设置mxd文档中图层为自定义符号时flex程序不做相应改变的bug
- Android.mk简介
- 地址的减法操作的实质:int k=(int *)10-(int *)2; k = ?
- StringBuilder与StringBuffer的区别
- 学习python笔记——模块
- OGNL表达式struts2标签“%,#,$”
- 怎么在eclipse里面导入maven
- AD多层板总结