1、dispatchTouchEvent感化:决定事宜是否由onInterceptTouchEvent来拦截处理。
返回super.dispatchTouchEvent时,由onInterceptTouchEvent来决定事宜的流向
返回false时,会持续分发事宜,本身内部只处理了ACTION_DOWN
返回true时,不会持续分发事宜,本身内部处理了所有事宜(ACTION_DOWN,ACTION_MOVE,ACTION_UP)
返回true时,拦截后交给本身的onTouchEvent处理
返回false时,拦截后交给子View来处理
3、onTouchEvent感化:事宜最终达到这个办法
(1)查看是否给button设置了OnTouchListener()事宜;
返回true时,内部处理所有的事宜,换句话说,后续事宜将持续传递给该view的onTouchEvent()处理
返回false时,事宜会向上传递,由onToucEvent来接收,如不雅最膳绫擎View中的onTouchEvent也返回false的话,那么事宜就会消掉
总结
- 如不雅ViewGroup找到了可以或许处理该事宜的View,则直接交给子View处理,本身的onTouchEvent不会被触发;
- 可以经由过程复写onInterceptTouchEvent(ev)办法,拦截子View的事宜(即return true),把事宜交给本身处理,则会履行本身对应的onTouchEvent办法。
- 子View可以经由过程调用getParent().requestDisallowInterceptTouchEvent(true); 阻拦ViewGroup对其MOVE或者UP事宜进行拦截;
- 一个点击事宜产生后,它的传递过程如下:
- Activity->Window->View。顶级View接收到事宜之后,就会按响应规矩去分发事宜。如不雅一个View的onTouchEvent办法返回false,那么将会交给父容器的onTouchEvent办法进行处理,逐级往上,如不雅所有的View都不处理该事宜,则交由Activity的onTouchEvent进行处理。
- 如不雅某一个View开端处理事宜,如不雅他不消费ACTION_DOWN事宜(也就是onTouchEvent返回false),则同一事宜序列比如接下来进行ACTION_MOVE,则不会再交给该View处理。
- ViewGroup默认不拦截任何事宜。
- 诸如TextView、ImageView这些不作为容器的View,一旦接收到事宜,就调用onTouchEvent办法,它们本身没有onInterceptTouchEvent办法。正常情况下,它们都邑消费事宜(返回true),除非它们是弗成点击的(clickable和longClickable都为false),那么就会交由父容器的onTouchEvent处理。
- 点击事宜分发过程如下 dispatchTouchEvent—->OnTouchListener的onTouch办法—->onTouchEvent-->OnClickListener的onClick办法。也就是说,我们日常平凡调用的setOnClickListener,优先级是最低的,所以,onTouchEvent或OnTouchListener的onTouch办法如不雅返回true,则不响应onClick办法.
【编辑推荐】
- Android APK反编译就这么简单详解(图文详解)
- Android Webview应用和碰到过的坑总结
- 谷歌官方Android应用架构库——LiveData
- 2017年实用于Android & iOS的最佳开源竽暌功用法度榜样
- AgentWeb是基于Android WebView一个功能完美小型浏览器库
推荐阅读
AgentWeb是基于Android WebView一个功能完善小型浏览器库
【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! Android 端AgentWeb 介绍AgentWeb是一个高度封装的 Android WebView ,简单易用 , 带有进度条 、 支撑文>>>详细阅读
地址:http://www.17bianji.com/lsqh/36325.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示