touch分发
2015-08-17 11:58
375 查看
子View
?
ViewGroup LinearLayout:
?
xml
?
一、
也就是說如果dispatchTouchEvent返回的是false,就不在接收接下來一系列觸摸事件的處理了。而且沒調用super,也不會將event傳遞到另外兩個方法。
调用了 dispatchTouchEvent方法中调用了 super.dispatchTouchEvent()后,另外的两个方法才得以调用。
其中只 dispatchTouchEvent return false:
同樣的不會處理down之後的事件,但是會將其給後面的兩個方法。
其中只 onInterceptTouchEvent return false
四、在ViewGroup中添加子View,並且設置了onClick之後:
1)
只接收down事件。之後的就不會再接收了。也就沒有點擊事件的處理情況,因為點擊的處理實在up之後進行的
2)
1、
dispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return false;
2、
dispatchTouchEvent return true:
onInterceptTouchEvent return true:
onTouchEvent return false;
可以看到事件沒有分發給子view,這時如果LinearLayout也有觸摸的處理事件的話,比如Click那麼:
也就是說,LinearLayout會響應點擊事件
3、
dispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return false;
相比較2例子而言,如果onInterceptTouchEvent return 的是false 那麼會先向下傳遞,最終TextView會得到事件的最終處理權。
4、
dispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return true;
可見向下傳遞後,子View處理完Click事件後,點擊事件已經消耗,所以LinearLayout不會在有點擊事件的響應。
5、
dispatchTouchEvent return true:
onInterceptTouchEvent return true:
onTouchEvent return true;
反正不會再向下傳遞,子view獲取不到事件了,所以onTouchEvent返回什麼就沒什麼大的關係了。
上面的例子都是子View的onTouchEvent return super.onTouchEvent(event); 下面我們手動的改一下讓他return false or true
6、子view onTouchEvent return 的是false
dispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return true;//false
執行了Activity中LinearLayout的點擊事件
7、子view onTouchEvent return 的是true
dispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return true;//false
沒有執行Activity中TextView的點擊事件。
?
?
?
是否調用super | return | ||
dispatchTouchEvent | true | ||
onInterceptTouchEvent | super | true | |
onTouchEvent | super | true | |
二、
是否調用super | return | ||
dispatchTouchEvent | false | ||
onInterceptTouchEvent | super | true | |
onTouchEvent | super | true |
也就是說如果dispatchTouchEvent返回的是false,就不在接收接下來一系列觸摸事件的處理了。而且沒調用super,也不會將event傳遞到另外兩個方法。
三、
是否調用super | return | ||
dispatchTouchEvent | super | true | |
onInterceptTouchEvent | super | true | |
onTouchEvent | super | true |
调用了 dispatchTouchEvent方法中调用了 super.dispatchTouchEvent()后,另外的两个方法才得以调用。
其中只 dispatchTouchEvent return false:
同樣的不會處理down之後的事件,但是會將其給後面的兩個方法。
其中只 onInterceptTouchEvent return false
四、在ViewGroup中添加子View,並且設置了onClick之後:
1) 是否調用super | return | ||
dispatchTouchEvent | super | false | |
onInterceptTouchEvent | super | false | |
onTouchEvent | super | false |
只接收down事件。之後的就不會再接收了。也就沒有點擊事件的處理情況,因為點擊的處理實在up之後進行的
2)
1、
dispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return false;
2、
dispatchTouchEvent return true:
onInterceptTouchEvent return true:
onTouchEvent return false;
可以看到事件沒有分發給子view,這時如果LinearLayout也有觸摸的處理事件的話,比如Click那麼:
也就是說,LinearLayout會響應點擊事件
3、
dispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return false;
相比較2例子而言,如果onInterceptTouchEvent return 的是false 那麼會先向下傳遞,最終TextView會得到事件的最終處理權。
4、
dispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return true;
可見向下傳遞後,子View處理完Click事件後,點擊事件已經消耗,所以LinearLayout不會在有點擊事件的響應。
5、
dispatchTouchEvent return true:
onInterceptTouchEvent return true:
onTouchEvent return true;
反正不會再向下傳遞,子view獲取不到事件了,所以onTouchEvent返回什麼就沒什麼大的關係了。
上面的例子都是子View的onTouchEvent return super.onTouchEvent(event); 下面我們手動的改一下讓他return false or true
6、子view onTouchEvent return 的是falsedispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return true;//false
執行了Activity中LinearLayout的點擊事件
7、子view onTouchEvent return 的是true
dispatchTouchEvent return true:
onInterceptTouchEvent return false:
onTouchEvent return true;//false
沒有執行Activity中TextView的點擊事件。
相关文章推荐
- NoSQL
- 数据分析技术问答集锦 补充ing
- 关于软硬结合
- 单例设计模式
- 纯CSS3实现滑动开关效果
- Linux编程基础——GDB(设置断点)
- 验证码无法显示:Could not initialize class sun.awt.X1 解决方案
- 基于Tomcat7、Java、WebSocket的服务器推送聊天室
- Jlink V8固件修复(支持MDK4.70a)
- 网络加载时Dialog
- zoj 3203 Light Bulb,三分之二的基本问题
- mqtt 协议之 PINGREQ, PINGRESP
- 数字整除
- 阻止冒泡和阻止默认事件——cancelBubble和stopPropagation
- Android学习系列--App调试内存泄露之Context篇(下)
- OC关于NSFileManager的再详解
- Oracle数据库登录错误提示提示ora 01033:oracle initialization or shutdown in progress,oracle11g
- 共享内存
- POJ 1017 Packets(贪心)
- 停止数据库