BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #26193同步于 2015/10/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

android touch event 分发机制的问题

lkasdolka2
2015/10/16镜像同步8 回复
感谢大家的回复,刚刚看到篇文章说的挺详细的: http://codetheory.in/understanding-android-input-touch-events/ 更新,大致应该是,如果一个MotionEvent(如ACTION_DOWN)dispatch到最底层的view(中间没有被拦截),然后从下往上每层对应onTouchEvent都返回false,一直回传到顶层activity的onTouchEvent,activity的onTouchEvent可以返回true/false,返回false表示这个MotionEvent没有被消费。如果出现这种情况,那么接下来的几个事件(ACTION_MOVE,ACTION_UP)都会直接交给activity的onTouchEvent处理。 如果有什么错误,欢迎指正~ ------------------------------------------------ 最近在看touch event分发机制知识。有一些疑问: 1.对于每一个touch event,android系统是不是能保证它一定会被消费掉,即会得到一定的响应? 2.如果系统保证事件会被消费掉,那么如果与一个touch事件相关的所有activity/viewgroup/view的dispatchTouchEvent(),onTouchListener.onTouch(),onTouchEvent()都返回false,会出现什么情况呢? 请高手解答下~
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
dss886机器人#1 · 2015/10/16
http://wangkuiwu.github.io/2015/01/02/TouchEvent-Activity/ Activity中的onTouchEvent是Activity自身对触摸事件的处理。如果该Activity的android:windowCloseOnTouchOutside属性为true,并且当前触摸事件是ACTION_DOWN,而且该触摸事件的坐标在Activity之外,同时Activity还包含了视图的话;就会导致Activity被结束。 啊,其实我没有试过他说的对不对
a206206机器人#2 · 2015/10/16
系统的默认处理肯定有的,就是ignore
zishi机器人#3 · 2015/10/16
你说的响应是?没有响应不表示系统没有处理,这个你可以做个实验,复写你写的那些方法,看看~~
lkasdolka2机器人#4 · 2015/10/16
哈 , 刚看还以为是你的博客~ 【 在 dss886 的大作中提到: 】 : http://wangkuiwu.github.io/2015/01/02/TouchEvent-Activity/ : Activity中的onTouchEvent是Activity自身对触摸事件的处理。如果该Activity的android:windowCloseOnTouchOutside属性为true,并且当前触摸事件是ACTION_DOWN,而且该触摸事件的坐标在Activity之外,同时Activity还包含了视图的话;就会导致Activity被结束。 : 啊,其实我没有试过他说的对不对
lkasdolka2机器人#5 · 2015/10/16
了解了,原来还以为一个事件在层层传递过程中一定要求要被消费掉的。。。 【 在 a206206 的大作中提到: 】 : 系统的默认处理肯定有的,就是ignore
lkasdolka2机器人#6 · 2015/10/16
这么说吧, 有一个activity a, 一个 viewgroup b落在a中, 一个view c落在 b中。这时候在c中出现一个touch事件,事件传递过程中没有拦截,所有onTouchEvent都返回false,会不会出现什么状况呢? 【 在 zishi 的大作中提到: 】 : 你说的响应是?没有响应不表示系统没有处理,这个你可以做个实验,复写你写的那些方法,看看~~
zishi机器人#7 · 2015/10/16
这个不就是正常的分发机制吗?像你这么说,activity也可以返回false啊,表示没有消费,不过后续应该不会对它有什么处理了吧,事件应该走完了~~ 【 在 lkasdolka2 的大作中提到: 】 : 感谢大家的回复,刚刚看到篇文章说的挺详细的: : http://codetheory.in/understanding-android-input-touch-events/ : 更新,大致应该是,如果一个MotionEvent(如ACTION_DOWN)dispatch到最底层的view(中间没有被拦截),然后从下往上每层对应onTouchEvent都返回false,一直回传到顶层activity的onTouchEvent,activity的onTouchEvent可以返回true/false,返回false表示这个MotionEvent没有被消费。如果出现这种情况,那么接下来的几个事件(ACTION_MOVE,ACTION_UP)都会直接交给activity的onTouchEvent处理。 : ...................
lkasdolka2机器人#8 · 2015/10/16
是这样的 【 在 zishi 的大作中提到: 】 : 这个不就是正常的分发机制吗?像你这么说,activity也可以返回false啊,表示没有消费,不过后续应该不会对它有什么处理了吧,事件应该走完了~~