为了账号安全,请及时绑定邮箱和手机立即绑定

请问为什么要在ACTION_DOWN返回true

请问为什么要在ACTION_DOWN返回true,听老师说是把触摸事件传递到自己本省并处理,可这个怎么理解,因为我还没去了解Android控件的事件分发机制

正在回答

1 回答

首先事件指的是触摸事件,分发,为什么要分发呢,就像你给自己的外甥发红包一样,这样也叫分发,那么这样就有viewgroup,viewgroup里面有子view,ViewGroup的相关事件有三个:onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent。View的相关事件只有两个:dispatchTouchEvent、onTouchEvent。

简单的来说就是viewgroup遍历自己的子view,如果子view中有viewgroup,就继续遍历这个viewgroup的子view,都是调用的dispatchTouchEvent来分发事件,dispatchTouchEvent会返回一个布尔值类型的参数,事件会一直分开,一直在某个view调用dispatchTouchEvent返回true,表示事件分发到此结束,返回true的这个view就是需要接受这个事件的view,

ViewGroup的dispatchTouchEvent是真正在执行“分发”工作,而View的dispatchTouchEvent方法,并不执行分发工作,或者说它分发的对象就是自己,决定是否把touch事件交给自己处理,而处理的方法,便是onTouchEvent事件,这里说到了view的onTouchEvent事件是这个时候开始执行,那么viewgroup的onTouchEvent什么时候执行呢?,当所有的子view调用dispatchTouchEvent都是返回false的时候,这个时候viewgroup的onTouchEvent就会执行

事实上,一次完整的Touch事件,应该是由一个Down、一个Up和若干个Move组成的

但是dispatchTouchEvent只是分发了Down事件,只有返回true的时候,证明这个view需要 这个事件,然后在继续分发Up和Move事件给它


0 回复 有任何疑惑可以回复我~
#1

PogbaLIU 提问者

你好,那么ViewGroup的dispatchTouchEvent的布尔返回值是true还是false?
2017-02-19 回复 有任何疑惑可以回复我~
#2

Listener呆 回复 PogbaLIU 提问者

只要事件传递到了当前View,那么dispatchTouchEcent方法就一定会被调用。返回结果表示是否消耗当前事件返回true表示你这个view要消耗掉这个事件,返回false那么继续传递给子view
2017-02-21 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android-五子连珠
  • 参与学习       39006    人
  • 解答问题       166    个

Android游戏开发-五子连珠,本教程通过UI与逻辑实现双人对战

进入课程

请问为什么要在ACTION_DOWN返回true

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信