对于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时该事件消失,并且接不到下一个事件。

ConTouchEvent:对事件作相应的处理,并返回一个boolean值。如果返回true则表示该事件已经被处理了,不会继续传递,并且该函数继续等待下一个事件;如果返回false则之歌事件会传给它的父View,并且由父View的onTouchEvent来接收,并做相同的处理。如果顶层的onTouchEvent也返回false的话,这个事件就会“消失”,而且接收不到下一次事件。(参看帮助文档该函数的返回值解释是:Returntrueifyouhaveconsumedtheevent,falseifyouhaven't.Thedefaultimplementationalwaysreturnsfalse.

原理可以参看下图:

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

可以定义好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



来自为知笔记(Wiz)

更多相关文章

  1. Android(安卓)事件处理
  2. android 返回键与finish区别 onBackPressed
  3. 13、Android重写系统返回键
  4. Android按键事件发布流程
  5. Android最好看的圆形进度条ProgressBar
  6. Android(安卓)屏幕滑动事件
  7. Android(安卓)按钮添加单击事件
  8. android双击返回键退出程序
  9. Android(安卓)之 AlertDialog 用户登录

随机推荐

  1. 浅谈Android常用控件
  2. java android客户端SSL通信 遇到的几个报
  3. Android X库 BiometricPrompt 中 Crypto
  4. Android 混淆代码问题总结
  5. Android字体加粗
  6. ubuntu搭建Android NDK环境与Android Stu
  7. SDK3.0 组件属性
  8. 2-8 Android 简单介绍 (一)
  9. Android 不要做错来使内存泄漏
  10. Android中Service与Thread的区别