Android View事件分发Tips

1. View.onTouchEvent()

  1. 如果View可点击的,clickable为true

比如 Button: super.onTouchEvent(event) 返回true

  1. 如果View不可点击,clickable为false

比如 TextView: super.onTouchEvent(event) 返回false

  1. 如果想让move和up都执行,那么需要onTouchEvent返回true。
    但是明确的返回true的话,点击事件不会被执行(至于为什么请自行上网查);如果又想让move、up执行,又想有点击事件怎么办?设置该控件的clickable为true

比如:button就自带clickable=true。剩下的 如TextView就需要手动设置clickable。

以上总结:

clickable为true,super为true;
clickable为false,super为false

return false,View只能处理DOWN事件,并且down之后的事件都不会被接收到
return true,则View的DOWN、MOVE、UP都能触发

2. ViewGroup.onInterceptTouchEvent()

return true,由viewGroup本身的onTouchEvent处理,事件不再往下分发
return false,由子view的onTouchEvent处理

它的move和up是否执行,由子View的onTouchEvent返回值决定。

  • 子view的onTouchEvent返回值为true,则onInterceptTouchEvent的move和up会执行

3. dispatchTouchEvent()

return true ,move和up都能走,
return false,只走down
return super,走不走move up由onTouchEvent返回值决定

4. ViewGroup.requestDisallowInterceptTouchEvent(boolean);

如果为true,则该View所在的ViewGroup的onInterceptTouchEvent不会被执行

5. 返回值的问题

直接返回 true 或 false,决定的是接下来能否接收到 MOVE 和 UP
返回 super.onTouchEvent(ev) 表示不处理,回调上一层的事件分发

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容