MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
来源:互联网 发布:java工程师的简历模板 编辑:程序博客网 时间:2024/05/16 01:03
onInterceptTouchEvent()用于处理事件并改变事件的传递方向。处理事件这个不用说了,你在函数内部编写代码处理就可以了。而决定传递方向的是返回值,返回为false时事件会传递给子控件的onInterceptTouchEvent();返回值为true时事件会传递给当前控件的onTouchEvent(),而不在传递给子控件,这就是所谓的Intercept(截断)。
onTouchEvent()用于处理事件,返回值决定当前控件是否消费(consume)了这个事件。可能你要问是否消费了又区别吗,反正我已经针对事件编写了处理代码?答案是有区别!比如ACTION_MOVE或者ACTION_UP发生的前提是一定曾经发生了ACTION_DOWN,如果你没有消费ACTION_DOWN,那么系统会认为ACTION_DOWN没有发生过,所以ACTION_MOVE或者ACTION_UP就不能被捕获。
- <?xml version="1.0" encoding="utf-8"?>
- <com.touchstudy.LayoutView1xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <com.touchstudy.LayoutView2
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:gravity="center">
- <com.touchstudy.MyTextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/tv"
- android:text="AB"
- android:textSize="40sp"
- android:textStyle="bold"
- android:background="#FFFFFF"
- android:textColor="#0000FF"/>
- </com.touchstudy.LayoutView2>
- </com.touchstudy.LayoutView1>
<?xml version="1.0" encoding="utf-8"?><com.touchstudy.LayoutView1 xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.touchstudy.LayoutView2 android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <com.touchstudy.MyTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:text="AB" android:textSize="40sp" android:textStyle="bold" android:background="#FFFFFF" android:textColor="#0000FF"/> </com.touchstudy.LayoutView2></com.touchstudy.LayoutView1>
在没有重写onInterceptTouchEvent()和onTouchEvent()的情况下(他们的返回值都是false), 对上面这个布局,MotionEvent事件的传递顺序如下:
当某个控件的onInterceptTouchEvent()返回值为true时,就会发生截断,事件被传到当前控件的onTouchEvent()。如我们将LayoutView2的onInterceptTouchEvent()返回值为true,则传递流程变成:
如果我们同时将LayoutView2的onInterceptTouchEvent()和onTouchEvent()设置成true,那么LayoutView2将消费被传递的事件,同时后续事件(如跟着ACTION_DOWN的ACTION_MOVE或者ACTION_UP)会直接传给LayoutView2的onTouchEvent(),不传给其他任何控件的任何函数。同时传递给子空间一个ACTION_CANCEL事件。传递流程变成(图中没有画出ACTION_CANCEL事件):
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- (转)MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序(转)
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序【转】
- 完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题
- iOS 多线程 锁 互斥 同步
- ios 国际化(项目名和内容)
- 探索Android 下拉刷新效果的实现
- Silverlight5在Tomcat上的部署
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- libmad MP3解码
- HDU2955--Robberies--动态规划
- 获取iPhone通话记录(需越狱)
- C程序中内存布局&Union大小尾端
- Windows系统获取系统的启动时间
- javascript美化下拉框js
- AS3中的元数据标签
- 最好的 调试函数 dump 取自 thinkphp