对于android触摸事件模型的一些理解
来源:互联网 发布:海信电视看网络电视 编辑:程序博客网 时间:2024/06/11 11:08
对于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触摸事件模型的一些理解
- 对于android触摸事件模型的一些理解
- 关于Android触摸事件的一些理解
- android 关于触摸事件的理解
- Android触摸事件传递的简单理解
- android多点触摸事件的一些事
- android的触摸事件
- Android的触摸事件
- 关于android触摸事件传递机制的一点理解
- Android 记录2 对于Android事件分发的理解
- 对于Android的事件分发机制的理解
- android开发中的一些触摸事件
- 对于线程的一些理解
- 对于工程师的一些理解
- 对于gbdt的一些理解
- 对于hive的一些理解
- 对于Android中消息机制的一些理解
- 网络判断的监听器
- uva 729 - The Hamming Distance Problem
- 【转载】Android使用Application总结
- SAS学习笔记(六)——关于数据格式的SAS函数
- ThreadPoolExecutor运转机制详解 - 走向架构师之路 - 博客频道 - CSDN.NET
- 对于android触摸事件模型的一些理解
- Selector中的各种状态详解
- 永久告别Android的背景选择器Selector!无需切很多图了!
- 程序结构
- hdu1080---Human Gene Functions
- C++对象的内存布局
- poj3278的一些注意事项
- 关于win7正确安装SQL Server2005
- C# Table.Rows[index].Delete()