博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Touch事件传递顺序。
阅读量:7172 次
发布时间:2019-06-29

本文共 1531 字,大约阅读时间需要 5 分钟。

hot3.png

首先所有的View和Activity都有

dispatchTouchEvent//用来分发TouchonTouchEvent//用来响应Touch

而ViewGroup则还有一个

onInterceptTouchEvent//用来拦截Touch

当按下界面时首先是由Activity的 dispatchTouchEvent被调用。然后是根View的dispatchTouchEvent,不断向子View传递,然后由最最后的子View首先响应onTouchEvent,接着父View的onTouchEvent不断被调用。

但是如果当前的View是ViewGroup时,则在dispatchTouchEvent被调用后onInterceptTouchEvent会被调用。

以上的情况都未返回默认的super.xxxTouchEvent的情况。

Activity:如果Activity的dispatchTouchEvent没调用super.dispatchTouchEvent那么Touch事件在此就终结了,后面将不会有任何和Touch有关的方法被调用。

所以说如果重写Activity的dispatchTouchEvent那么一定要调用super.dispatchTouchEvent,除非你不打算让Touch事件向下传递。Activity的dispatchTouchEvent方法的返回值并不会影响Touch事件后续调用。所以返回true,false好像无所谓。

ViewGroup:如果ViewGroup的dispatchTouchEvent没调用super.dispatchTouchEvent并且返回true那么Touch事件在此就终结了,后面将不会有任何和Touch有关的方法被调用。如果返回false那么父View的onTouchEvent将被调用。   如果调用super.dispatchTouchEvent并且返回值为true那么父View的onTouchEvent将不会被调用。View同理

onInterceptTouchEvent如果返回值为true则表示Touch事件被拦截,子View的dispatchTouchEvent将不会被调用。该方法默认返回false,表示子View的dispatchTouchEvent将会被调用。

onTouchEvent该方法表示触发了Touch事件。如果返回true则表示该事件当前View已经处理完了,父View不用管了。

如果重写了onTouchEvent但又没有调用super.onTouchEvent那么将会影响当前View的OnClickListener等事件的触发。

总结

  1. dispatchTouchEvent/onTouchEvent任意一个返回true那么事件在此终结。父View的onTouchEvent将不会被调用。

  2. super.dispatchTouchEvent用来调用子View的dispatchTouchEvent和自己的onTouchEvent

  3. super.onTouchEvent用来调用自己的OnClickListener等事件。

  4. onInterceptTouchEvent的返回值用来表示是否拦截传递给子View的事件。true表示子View的dispatchTouchEvent不被调用。

  5. 如果当前的View或ViewGroup有OnClickListener等方法那么Touch将在此终结不管dispatchTouchEvent/onTouchEvent的返回值未何。

转载于:https://my.oschina.net/u/2406628/blog/614277

你可能感兴趣的文章
Linux Vim
查看>>
UVA - 11987 Almost Union-Find[并查集 删除]
查看>>
使用css开启硬件加速提高网站性能
查看>>
CMakeLists.txt的写法
查看>>
Flask如何使用https?
查看>>
Linux命令之kill
查看>>
Asp.Net SignalR Hub类中的操作详解
查看>>
附上解决迅雷9及迅雷极速版任何资源下载任务出错、内容违规问题
查看>>
hadoop3: mkdir: cannot create directory `/usr/local/hadoop/bin/../logs’: Permission denied
查看>>
高阶函数与面向对象继承的比较
查看>>
群雄逐鹿的移动互联网时代【转载】
查看>>
【排序】InsertSort
查看>>
[c++11]多线程编程(五)——unique_lock
查看>>
漫谈promise使用场景
查看>>
Design Pattern的万剑归宗 => Mediator
查看>>
Javascript中的原型继承的一些看法与见解
查看>>
HackerRank:JavaScript 是最知名的编程语言
查看>>
Linux修改本地时间
查看>>
elasticsearch字符串包含查询
查看>>
5- Flask构建弹幕微电影网站-项目分析、搭建目录及模型设计
查看>>