对于android触摸事件模型的一些理解
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}html, body{ }h1 { font-size:1.5em; font-weight:bold;}h2 { font-size:1.4em; font-weight:bold;}h3 { font-size:1.3em; font-weight:bold;}h4 { font-size:1.2em; font-weight:bold;}h5 { font-size:1.1em; font-weight:bold;}h6 { font-size:1.0em; font-weight:bold;}img { border:0; max-width: 100%;}blockquote { margin-top:0px; margin-bottom:0px;}table { border-collapse:collapse; border:1px solid #bbbbbb;}td { border-collapse:collapse; border:1px solid #bbbbbb;}对于android触摸事件模型的一些理解
对于android触摸事件模型的一些理解
进行Android开发时,需要用到事件响应函数的地方实在是太多了。由于最近使用事件响应来完成一些功能时频频碰壁,于是下决心深入了解一下android事件模型。我百度了一圈,搜集了很多相关的资料,也看了些许sdk的帮助文档,整理了一下,对于事件模型有了一点理解。希望对大家有点帮助。
Android中有很多视图,这些视图时有层次结构的,视图之间有父子关系。每个视图都有自己对应的事件,视图的事件会在父子视图之间传递(比如父视图的事件可能会传给子视图,反之亦然)。在这里只讲触摸事件。
在每个 View 中跟 Touch 事件相关的函数以下3个(返回值都是boolean):
a、dispatchTouchEvent : 负责分发事件的,事件从 activity 传递出来之后,最先到达的就是最顶层 view 的 dispatchTouchEvent ,然后它进行分发,如果返回 false ,则交给这个 view 的 interceptTouchEvent 方法,如果返回true该函数则等待下一事件的到来。
b、interceptTouchEvnet :该方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给该View的 onTouchEvent 来处理 ,如果返回false,也就是该View并不拦截该事件,那么这个时间会传递给它的子View,由子View处理这个事件。如果是对底层的View(没有子View)那么返回false时该事件消失,并且接不到下一个事件。
C、onTouchEvent :对事件作相应的处理,并返回一个boolean值。如果返回true则表示该事件已经被处理了,不会继续传递,并且该函数继续等待下一个事件;如果返回false则之歌事件会传给它的父View,并且由父View的 onTouchEvent 来接收,并做相同的处理。如果顶层的onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。(参看帮助文档该函数的返回值解释是:Return true if you have consumed the event, false if you haven't. The default implementation always returns false. )
原理可以参看下图:

上面介绍了事件的大致传递流程,下面介绍一下如何为事件添加监听器,即将定义好的监听器注册到视图。添加监听器之后,该视图就能获得事件的通知,并执行相应的函数。
可以定义好Listener再添加到视图(这里是ViewFlipper控件flipper),如下:

也可以在添加Listener的时候直接定义Listener,如下:

还有一种方法就是让Activity类实现接口OnTouchListener,然后再类中实现其方法onTouch,然后再onCreate中调用flipper.setOnTouchListener(this);即可。
这里有个问题,this所指的是一个Activity类的子类,并实现了OnTouchListener的test类。由于test实现了OnTouchListener,所以它可以转为setOnTouchListener所需的参数类型OnTouchListener。

参考网址:
http://hi.baidu.com/lck0502/blog/item/7eeb452a846ff196023bf654.html
对于android触摸事件模型的一些理解的更多相关文章
- 初识Android触摸事件传递机制
前言 今天总结的一个知识点是Andorid中View事件传递机制,也是核心知识点,相信很多开发者在面对这个问题时候会觉得困惑,另外,View的另外一个难题滑动冲突,比如在ScrollView中嵌套Li ...
- Android触摸事件的应用
前言 上一篇讲了Android触摸事件的传递机制,具体可以看这里 初识Android触摸事件传递机制.既然知道Android中触摸事件的传递分发,那么它能解决什么样的问题,在我们实际开发中如何应用,这 ...
- Android触摸事件传递机制
简单梳理一下Android触摸事件传递机制的知识点. 一.View与ViewGroup的关系 View和ViewGroup二者的继承关系如下图所示: View是Android中最基本的一种UI组件,它 ...
- iOS 和 Android 触摸事件传递
先看文章,写得很好 ios 触摸事件传递 http://www.cnblogs.com/Quains/p/3369132.html 另外一篇 http://blog.csdn.net/yongyinm ...
- 一个demo让你彻底理解Android触摸事件的并发
注:本文涉及的demo的地址:https://github.com/absfree/TouchDispatch 1. 触摸动作及事件序列 (1)触摸事件的动作 触摸动作一共有三种:ACTION_DOW ...
- android自定义控件(9)-Android触摸事件分发机制
触摸事件的传递机制: 首先是最外层的viewgroup接收到事件,然后调用会调用自己的dispatchTouchEvent方法.如果在ACTION_DOWN的时候dispatchTouchEven ...
- Android触摸事件
简单介绍: 做了一个语音发送UI的小demo. 按下显示语音窗体,依据音量调节UI音量显示,上划至窗体显示取消发送. 原理: 1:获取什么事件来运行操作: 给Button加入setOnTouchLis ...
- 【知识梳理1】Android触摸事件机制
前言 随着科学技术的发展,智能手机早已成为我们当代人身边不可缺少的"伙伴"之中的一个,堪比对象女友.每天我们对着手机反复的做着点击.滑动操作,而手机则随着我们的操作给我们展示她的精 ...
- Android触摸事件传递机制,这一篇就够了
整个触摸事件牵涉到的是,Activity,View,ViewGroup三者的传递机制. 这个触摸事件就是从外层往内层一层层的传递. 整个传递机制,分为3个步骤:分发,拦截,和消费. 1. 触摸事件的类 ...
随机推荐
- 利用phantomjs模拟QQ自动登录
之前为了抓取兴趣部落里的数据,研究了下QQ自动登录. 当时搜索了一番,发现大部分方法都已经失效了,于是准备自己开搞. 第一个想到的就是参考网上已有方案的做法,梳理登陆js的实现,通过其他语言重写.考虑 ...
- angular的注入实现
angular需要对用户的传入函数进行静态分析,抽取当中的依赖,才能工作.因此用户的函数,包括控制器函数,工厂函数,服务函数与$watch回调都只是一个模板,用于取toString,真正运行的是编译后 ...
- Linux 命令之last命令详解
last:命令解释show listing of last logged in users 指令所在路径:/usr/bin/last 命令输出字段介绍: 第一列:用户名 第二列:终端位置.pts/0 ...
- jquery easyui的异步tree
1.创建一个简单的tree 结果如图: <script> $(function(){ $('#tt').tree(){ url:'要提交的url地址', checkbox:true, li ...
- CentOS查看系统信息-CentOS查看命令
一:查看cpu more /proc/cpuinfo | grep "model name" grep "model name" /proc/cpuinfo 如 ...
- MFC编辑框换行实现
MFC中换行实现 在mfc中编辑框允许输入多行时,换行符被表示为<归位><换行>即“\r\n”,用ascii码表示为13 10 如果为编辑框中想要输入换行,就请将编辑框的属性: ...
- jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究
终于动笔开始 jQuery 源码解析第二篇,写文章还真是有难度,要把自已懂的表述清楚,要让别人听懂真的不是一见易事. 在 jQuery 源码解析一:jQuery 类库整体架构设计解析 一文,大致描述了 ...
- 详解Oracle创建用户权限全过程
本文将介绍的是通过创建一张表,进而实现Oracle创建用户权限的过程.以下这些代码主要也就是为实现Oracle创建用户权限而编写,希望能对大家有所帮助. 注意:每条语语分开执行,结尾必须用分号; // ...
- cocos2d-x CCScale9Sprite
转自:http://www.cocos2dev.com/?p=295 前段时间看CCEditBox的时候,发现里面有个利用9宫格图缩放图片的,也就是缩放带圆角的图片. 这个比较有用处,很多游戏中有很多 ...
- c#加密 可逆与不可逆MD5 加密
1.方法一 (不可逆加密) srxljl public string EncryptPassword(string PasswordString,string PasswordFormat ) ...