View的事件分发机制——简单明了
来源:互联网 发布:用eclipse编写python 编辑:程序博客网 时间:2024/06/01 08:23
最近在我们的小规模Android技术群有个人问了一个问题,关于事件分发的问题。“父控件(ViewGroup)需要实现左右滑动,而父控件中的子View又要实现OnClick方法”。他的问题就是子View实现了OnClick方法而父控件的OnTouch不响应。
问题就是这样,其实搞定这个问题很简单。不过得弄清楚View的事件分发。话说普通Android程序员源码瞅瞅就成了,不用死气摆列的弄懂。话不多说先上一段小代码。
//开始分发咯public boolean dispatchTouchEvent(MotionEvent event){ boolean result=false; if(onInterceptTouchEvent(event))//问问自己要不要 { resulet=onTouchEvent(event);//自己的触摸事件 } else { resulet=child.dispatchTouchEvent(event);//调用子View的事件分发 } return result;}
得了,就上面的算是伪代码吧,感觉应对普通的ViewGroup事件冲突算是bingo咯。得解释下下,顺便理理自己的思路。
View的事件分发,主要得分清楚是View还是ViewGroup。其中涉及到ViewGroup事件分发的方法是dispatchTouchEvent->onInterceptTouchEvent->onTouchEvent。调用的顺序我也标注出来了。而单纯的View事件分发中没有onInterceptTouchEvent。
好啦,具体是怎么分发的看我的伪代码就成,其中方法中的实现细节(你丫自己重写个试试不就得了?)。国际惯例回答最初上面的那个问题。
QU:子View实现了OnClick方法而父控件的OnTouch不响应
AN:在父viewgroup中intercept方法中判断是否向左或向右方法。如果是则return true(调用自己的ontouch)。如果不是则返回false将触摸事件给自己的childview消费。(现在的问题是不是跑到判断是否向左右滑动啦?哈哈)
PS:正常情况下一次点击事件只能被一个View给消费了,如果子View返回了true,父控件就不会响应了。也有特殊情况,比如在ontoutch方法中将Event强制给了别的View。那就有两个View会响应本次的“抚摸”了~
- View的事件分发机制——简单明了
- Android —View的事件分发机制
- View的事件体系——事件分发机制
- Android——View事件分发机制
- 13.View的事件分发机制——dispatchTouchEvent详解
- Android—— View事件分发机制的源码分析
- View的事件分发机制——预备篇
- View事件分发机制——requestDisallowInterceptTouchEvent的用法
- View 的事件分发机制
- View的事件分发机制。
- View的事件分发机制
- View的事件分发机制
- view的事件分发机制
- View的事件分发机制
- View的事件分发机制
- View的事件分发机制
- view的事件分发机制
- View的事件分发机制
- Android常用辅助类(三)——存储相关
- 在POM配置Maven plugin提示错误“Plugin execution not covered by lifecycle configuration”的解决方案
- c++迭代器总结
- 【PHP】PHP MySQL问题 phpinfo() 没有显示MySQL模块
- PyCharm 配置&&操作
- View的事件分发机制——简单明了
- [Xcode使用] 自定义代码块引用
- 单点更新区间求和贴海报问题 hdu2795 billbord
- hdoj 2243 考研路茫茫——单词情结 【AC自动机 + 构造矩阵】
- 【设计模式】——六原则(一)
- 开发工具uml
- javaWeb与MVC
- LintCode : 搜索旋转排序数组 II
- CloudStack 4.4+KVM之CloudStack配置过程