在项目中遇到了ScrollView 与内部的Gallery Touch事件的问题,学习了网上大侠们的研究成果,以及Android官网的文档,根据个人理解在此做个学习记录,也希望对大家有所帮助。

一、Android Touch事件的传递机制

从外层的View依次向内层的子View分发传递,直至某个子View处理了Touch事件(即该子View的onTouchEvent方法做出相应处理,并返回true),否则到最内层的子View之后,再冒泡向上返回当前View对Touche事件处理的结果(即View的onTouchEvent返回的布尔值)。

二、Android Touch事件三个方法

1)publicbooleandispatchTouchEvent(MotionEvent ev) 向下层的目标View传递(分发)触摸事件,如果当前View为目标View则传递给当前View

返回值:true 表示当前的View分发处理Touch事件,首先接收到了down,以及后续的up等,此时可以将完整的down、up传递给子View或者当前View。

false当前View没有分发处理Touch事件,其子View也不能处理Touch事件。

2)public booleanonInterceptTouchEvent(MotionEvent ev) 截获所有的Touch事件

返回值:true 该事件被当前View截获处理,此方法将不再接收到后续的Touch事件,所有的后续事件将在当前View的onTouchEvent中处理,事件的目标View仍能接收到相同的Touch事件,但该事件的Action为ACTION_CANCEL。

false 所有的Touch将会首先传递到此方法,然后传递到该Touch事件的目标View的onTouchEvent中。

3)publicboolean 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。

更多相关文章

  1. Android下的图形处理
  2. 【Android】ViewPager实现图片左右滑动播放及添加点击事件
  3. 我的Android进阶之旅------>Android中解析XML 技术详解---->SAX
  4. [原创]Android中LocationManager的简单使用,获取当前位置
  5. Android中几种图像特效处理的集锦!!!
  6. Android中LocationManager的简单使用,获取当前位置
  7. Android音视频学习路线
  8. 源码解析Android中的事件处理
  9. 我的Android进阶之旅------>Android中解析XML 技术详解---->SAX

随机推荐

  1. Android(安卓)平台开源3D游戏引擎列表
  2. 学习笔记_android四种点击事件方法
  3. fastboot 详解
  4. Ant 打包 Android(安卓)Project
  5. Android中父View和子view的点击事件
  6. eclipse - An internal error occurred d
  7. Android中通过按键旋转屏幕
  8. Android(安卓)浅析View的事件分发机制
  9. Android(安卓)Framework层Power键关机流
  10. Appium Android(安卓)元素定位方法 原生+