Android Touch 触摸事件
2012-04-23 18:23
274 查看
在项目中遇到了ScrollView 与内部的Gallery Touch事件的问题,学习了网上大侠们的研究成果,以及Android官网的文档,根据个人理解在此做个学习记录,也希望对大家有所帮助。
一、Android Touch事件的传递机制
从外层的View依次向内层的子View分发传递,直至某个子View处理了Touch事件(即该子View的onTouchEvent方法做出相应处理,并返回true),否则到最内层的子View之后,再冒泡向上返回当前View对Touche事件处理的结果(即View的onTouchEvent返回的布尔值)。
二、Android Touch事件三个方法
1)public boolean dispatchTouchEvent(MotionEvent ev) 向下层的目标View传递(分发)触摸事件,如果当前View为目标View则传递给当前View
返回值:true 表示当前的View分发处理Touch事件,首先接收到了down,以及后续的up等,此时可以将完整的down、up传递给子View或者当前View。
false 当前View没有分发处理Touch事件,其子View也不能处理Touch事件。
2)public boolean onInterceptTouchEvent(MotionEvent
ev) 截获所有的Touch事件
返回值:true 该事件被当前View截获处理,此方法将不再接收到后续的Touch事件,所有的后续事件将在当前View的onTouchEvent中处理,事件的目标View仍能接收到相同的Touch事件,但该事件的Action为ACTION_CANCEL。
false 所有的Touch将会首先传递到此方法,然后传递到该Touch事件的目标View的onTouchEvent中。
3)public boolean
onTouchEvent(MotionEvent event) 处理Touch事件。
返回值:true 表示Touch事件被当前View处理了,父View收到当前View返回的true时认为该Touchu事件已经被处理。
false 表示Touchu事件没有被处理,将向上传递给父View进行处理。
三、Android Touch事件流程
在Android2.2下,无论dispatchTouchEvent返回true和false都会调用onInterceptTouchEvent方法,这和网上讨论的说法有所不同,没有验证是否是版本问题。同时,dispatchTouchEvent返回false时View只能接收到down事件,后续事件不能再接收到,无法调用onTouchEvent。
![](http://my.csdn.net/uploads/201204/23/1335176747_2975.png)
一、Android Touch事件的传递机制
从外层的View依次向内层的子View分发传递,直至某个子View处理了Touch事件(即该子View的onTouchEvent方法做出相应处理,并返回true),否则到最内层的子View之后,再冒泡向上返回当前View对Touche事件处理的结果(即View的onTouchEvent返回的布尔值)。
二、Android Touch事件三个方法
1)public boolean dispatchTouchEvent(MotionEvent ev) 向下层的目标View传递(分发)触摸事件,如果当前View为目标View则传递给当前View
返回值:true 表示当前的View分发处理Touch事件,首先接收到了down,以及后续的up等,此时可以将完整的down、up传递给子View或者当前View。
false 当前View没有分发处理Touch事件,其子View也不能处理Touch事件。
2)public boolean onInterceptTouchEvent(MotionEvent
ev) 截获所有的Touch事件
返回值:true 该事件被当前View截获处理,此方法将不再接收到后续的Touch事件,所有的后续事件将在当前View的onTouchEvent中处理,事件的目标View仍能接收到相同的Touch事件,但该事件的Action为ACTION_CANCEL。
false 所有的Touch将会首先传递到此方法,然后传递到该Touch事件的目标View的onTouchEvent中。
3)public boolean
onTouchEvent(MotionEvent event) 处理Touch事件。
返回值:true 表示Touch事件被当前View处理了,父View收到当前View返回的true时认为该Touchu事件已经被处理。
false 表示Touchu事件没有被处理,将向上传递给父View进行处理。
三、Android Touch事件流程
在Android2.2下,无论dispatchTouchEvent返回true和false都会调用onInterceptTouchEvent方法,这和网上讨论的说法有所不同,没有验证是否是版本问题。同时,dispatchTouchEvent返回false时View只能接收到down事件,后续事件不能再接收到,无法调用onTouchEvent。
![](http://my.csdn.net/uploads/201204/23/1335176747_2975.png)
相关文章推荐
- Android 判断触摸点是否在某个view内部,解决子childView与parentView的touch事件冲突
- android开发步步为营之65:解决ScrollView和ListView触摸事件onInterceptTouchEvent相互冲突问题
- android触摸事件传递机制以及onInterceptTouchEvent()和onTouchEvent()总结
- Android触摸事件(一)-AbsTouchEventHandle
- 【转】Android笔记:触摸事件的分析与总结----Touch事件分发方法dispatchTouchEvent()源码分析
- Android触摸事件处理机制之requestDisallowInterceptTouchEvent
- Android 触摸事件的分发与处理流程:onInterceptTouchEvent和onTouchEvent
- 【Android View】Android中View对触摸事件的处理和传递dispatchTouchEvent、onInterceptTouchEvent
- Android开发-自定义View-AndroidStudio(二十三)onTouchEvent触摸事件
- android安卓触摸事件touchEvent分发的 核心精辟代码
- Android开发-自定义View-AndroidStudio(二十三)onTouchEvent触摸事件
- android中的Touch触摸事件传递机制
- Android----------ontouchlistener触摸事件
- Android 屏幕触摸事件之诡----dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent,onTouch
- android开发步步为营之65:解决ScrollView和ListView触摸事件onInterceptTouchEvent相互冲突问题
- android各种触摸事件的处理,touchEvent
- Android开发08_OnTouchevent触摸事件(手势监听)
- android 触摸(Touch)事件、点击(Click)事件的区别(详细解析)
- 关于Android触摸事件TouchEvent的传递及截取,研究心得。
- 第17天 Android Touch事件学习 4 获取手指触摸位置