android 浅入浅出看一下事件传递
来源:互联网 发布:安装vs2015网络 编辑:程序博客网 时间:2024/06/05 15:20
事件传递三大方法
- dispatchTouchEvent (分发事件 retrue ture 分发,false 不分发)
- onInterceptTouchEvent (拦截事件 etrue ture 拦截,false 不拦截)
- onTouchEvent (触摸事件 return true 消费,false 不消费)
浅入事件传递
在这里空洞的解释,就好像玩游戏的时候,你女朋友各种找事儿一样,永远的无法理解,那么咱们就来个儿童教学法吧,记住生活处处有真理,来个场景吧,祖孙三人一个苹果(只要咬了一口就不能给自己的子辈吃,但是可以给父辈吃),父辈拿到苹果舍不得吃往下传递给子辈儿,就是这个了,那么上面的三个事件就可以解释为
1. dispatchTouchEvent (从父辈拿苹果 retrue ture 拿,false 不拿)
2. onInterceptTouchEvent (给子辈儿苹果 etrue ture 不给,false 给)
3. onTouchEvent (吃苹果 return true 吃完,false 不吃完)
这里差一张图 大家可以用上面的思维考虑一下
事件传递常见问题
- view的onTouchEvent,OnClickListerner和OnTouchListener的onTouch方法 三者优先级如何?
答:onTouchListener优先级最高,如果onTouch方法返回 false ,那onTouchEvent就被调用了,返回true 就不会被调用。至于onClick 优先级最低。 - 点击事件的传递顺序如何?
答:Activity-Window-View。从上到下依次传递,当然了如果你最低的那个view onTouchEvent返回false 那就说明他不想处理 那就再往上抛,都不处理的话最终就还是让Activity自己处理了。
源码为
//activity的dispatchTouchEvent 方法 一开始就是交给window去处理的//win的superDispatchTouchEvent 返回true 那就直接结束了 这个函数了。返回false就意味//这事件没人处理,最终还是给activity的onTouchEvent 自己处理 这里的getwindow 其实就是phonewindow public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); } if (getWindow().superDispatchTouchEvent(ev)) { return true; } return onTouchEvent(ev); }//来看phonewindow的这个函数 直接把事件传递给了mDecor @Override public boolean superDispatchTouchEvent(MotionEvent event) { return mDecor.superDispatchTouchEvent(event); }//devorview就是 我们的rootview了 就是那个framelayout 我们的setContentView里面传递的那个layout//就是这个decorview的 子view了 @Override public final View getDecorView() { if (mDecor == null) { installDecor(); } return mDecor; }
- view的OnTouchListener的 onTouch ,和 onTouchEvent,OnClickListerner 方法 三者优先级如何?
答:onTouchListener优先级最高,如果onTouch方法返回 false(自己不消费) ,那onTouchEvent就被调用了,返回true(自己消费) 就不会被调用,至于onClick 优先级最低.
优先级如下:
OnTouchListener > onTouch > onTouchEvent > OnClickListerner - enable是否影响view的onTouchEvent返回值?
答:不影响,只要clickable和longClickable有一个为真,那么onTouchEvent就返回true。
有错误的地方希望可以告诉我,一起进步,谢谢
0 0
- android 浅入浅出看一下事件传递
- android 事件传递机制
- android 事件传递机制
- android触摸事件传递
- android事件传递机制
- android 事件传递
- Android触摸事件传递
- Android事件传递机制
- Android 事件传递机制
- android 事件的传递
- Android事件传递机制
- Android中的事件传递
- Android事件传递机制
- Android事件传递机制
- Android事件传递机制
- Android事件传递机制
- Android事件传递机制
- Android事件传递机制
- LeetCode: Pascal's Triangle II
- win7 64 + xbmc-17.1rc1-Krypton + vs2015编译
- 欢迎使用CSDN-markdown编辑器
- 路由器设置端口映射(局域网通过外网访问)
- Django 常用基本命令
- android 浅入浅出看一下事件传递
- ffmpeg: time_base分析
- 循环队列打印杨辉三角
- 系统思考方式
- UIActivityIndicatorView
- PTA 5-19 支票面额
- SharedPreferences
- Linux文件系统命令
- python之禅——import this