安卓中touch事件传递机制

AndroidTouch事件传递机制解析没事逛论坛,无意间看到了一篇非常不错的帖子,转载如下:开篇语:最近程序在做一个小效果,要用到touch,结果整得云里面雾里的,干脆就好好把androidtouch机制好好看了一下,呵呵。。android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:1)publicbooleandispatchTouchEvent(MotionEventev)这个方法用来分发TouchEvent2)publicbooleanonInterceptTouchEvent(MotionEventev)这个方法用来拦截TouchEvent3)publicbooleanonTouchEvent(MotionEventev)这个方法用来处理TouchEvent注意:不是所有的View的子类,很多教程都说的是所有的View的子类,只有可以向里面添加View的控件才需要分发,比如TextView它本身就是最小的view了,所以不用再向它的子视图分发了,它也没有子视图了,所以它没有dispatch和Intercept,只有touchEvent。说明:白色为最外层,它占满整个屏幕;红色为中间区域,属于白色中的一层;黑色为中心区域,必于红色中的一层。注意:他们本质上是:LinearLayout,而不是RelativeLayout或者其它布局。1.由中心区域处理touch事件布局文件如下:1.<?xmlversion="1.0"encoding="utf-8"?>2.<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent"5.android:orientation="vertical">6.<com.kris.touch.widget.TouchView7.android:id="@+id/view_out"8.android:layout_width="fill_parent"9.android:layout_height="fill_parent"10.android:background="#fff"11.android:gravity="center">12.<com.kris.touch.widget.TouchView13.android:id="@+id/view_mid"14.android:layout_width="300px"15.android:layout_height="400px"16.android:background="#f00"17.android:gravity="center">18.<com.kris.touch.widget.TouchView19.android:id="@+id/view_center"20.android:layout_width="150px"21.android:layout_height="150px"22.android:background="#000"23.android:gravity="center"24.android:clickable="true">25.</com.kris.touch.widget.TouchView>26.</com.kris.touch.widget.TouchView>27.</com.kris.touch.widget.TouchView>28.</LinearLayout>复制代码注意:android:clickable="true"接下来我们看一下打印的日志:结合是上面的日志,我们可以看一下ACTION_DOWN事件处理流程:说明:首先触摸事件发生时(ACTION_DOWN),由系统调用Activity的dispatchTouchEvent方法,分发该事件。根据触摸事件的坐标,将此事件传递给out的dispatchTouchEvent处理,out则调用onInterceptTouchEvent判断事件是由自己处理,还是继续分发给子View。此处由于out不处理Touch事件,故根据事件发生坐标,将事件传递给out的直接子View(即middle)。Middle及Center中事件处理过程同上。但是由于Center组件是clickable表示其能处理Touch事件,故center中的onInterceptTouchEvent方法将事件传递给center自己的onTouchEvent方法处理。至此,此Touch事件已被处理,不继续进行传递。2.没有指定谁会处理touch事件布局文件如下:1.<?xmlversion="1.0"encoding="utf-8"?>2.<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent"5.android:orientation="vertical">6.<com.kris.touch.widget.TouchView7.android:id="@+id/view_out"8.android:layout_width="fill_parent"9.android:layout_height="fill_parent"10.android:background="#fff"11.android:gravity="center">12.<com.kris.touch.widget.TouchView13.android:id="@+id/view_mid"14.android:layout_width="300px"15.android:layout_height="400px"16.android:background="#f00"17.android:gravity="center">18.<com.kris.touch.widget.TouchView19.android:id="@+id/view_center"20.android:layout_width="150px"21.android:layout_height="150px"22.android:background="#000"23.an...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?