android中事件传递机制(2)
2016-04-05 18:13
330 查看
事件传递机制(1)
写这个博客前先补充一下上一个博客的部分内容,我们上一个博客介绍了viewGroup中的代码,那么viewGroup中的分发函数由谁来调用的呢?,当然是activity。
1.首先我们看一下activity中的代码
从代码中可以看得出调用了window的分发方法,这个window类是在android_src_home/framework/policies/base/phone/com/android/internal/policy/impl目录下的PhoneWindow.java。
2.我们看一下这个类中代码
可以看得出来是调用的DecorView中的代码,该类继承FrameLayout,FrameLayout继承ViewGroup。所以activity中也是调用ViewGroup的分发方法分发给窗体中的所有ViewGroup。
好了补充完了以后我们继续探讨一下,事件传递下去以后会不传递回父控件,经过看ViewGroup代码我们知道,如果所有子控件都返回false那么viewGroup就会调用super.onTouchEvent。所以我们可以推理出,如果子控件中OnTouchEvent方法返回false的话会调用上一层的onTouchEvent方法。
所以可以得出结论:
view中方法:分发、处理(分发中调用处理方法)
ViewGroup:分发、继承view处理、拦截
1.事件又上层父控件获取,通过dispatchTouchEnvet()方法中调用所有字控件分发方法,将消息分发给子控件。如果OnInterceptEvent()返回true怎不给子控件分发。
2.没有子控件时调用自己的OnTouchEvent方法。
3.当事件传递到最低端控件还没有得到处理(OnTouchEvent方法都返回false)则调用父类的OnTouchEvent方法
下一个微博将用图文和通俗易懂的方式总结传递机制,让大家能够更深刻的理解。
写这个博客前先补充一下上一个博客的部分内容,我们上一个博客介绍了viewGroup中的代码,那么viewGroup中的分发函数由谁来调用的呢?,当然是activity。
1.首先我们看一下activity中的代码
public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); } if (getWindow().superDispatchTouchEvent(ev)) { return true; } return onTouchEvent(ev); }
从代码中可以看得出调用了window的分发方法,这个window类是在android_src_home/framework/policies/base/phone/com/android/internal/policy/impl目录下的PhoneWindow.java。
2.我们看一下这个类中代码
public boolean superDispatchTouchEvent(MotionEvent event) { return mDecor.superDispatchTouchEvent(event); }
private DecorView mDecor;
可以看得出来是调用的DecorView中的代码,该类继承FrameLayout,FrameLayout继承ViewGroup。所以activity中也是调用ViewGroup的分发方法分发给窗体中的所有ViewGroup。
好了补充完了以后我们继续探讨一下,事件传递下去以后会不传递回父控件,经过看ViewGroup代码我们知道,如果所有子控件都返回false那么viewGroup就会调用super.onTouchEvent。所以我们可以推理出,如果子控件中OnTouchEvent方法返回false的话会调用上一层的onTouchEvent方法。
所以可以得出结论:
view中方法:分发、处理(分发中调用处理方法)
ViewGroup:分发、继承view处理、拦截
1.事件又上层父控件获取,通过dispatchTouchEnvet()方法中调用所有字控件分发方法,将消息分发给子控件。如果OnInterceptEvent()返回true怎不给子控件分发。
2.没有子控件时调用自己的OnTouchEvent方法。
3.当事件传递到最低端控件还没有得到处理(OnTouchEvent方法都返回false)则调用父类的OnTouchEvent方法
下一个微博将用图文和通俗易懂的方式总结传递机制,让大家能够更深刻的理解。
相关文章推荐
- android 自带 文件大小转换.
- Android 使用SWIG生成Jni代码
- AndroidManifest.xml文件详解
- Android Property Animator (属性动画)第二篇
- Android消息处理机制Message,Looper,Handler
- Android 开源库实践
- Android事件分发机制详解
- Android 中的一些开发技巧(延迟启动,文件写出,透明状态栏,任意界面退出)
- Android百度地图开发 百度地图得到当前位置
- 济南android培训机构应该如何来选择?
- Android开发常用工具方法
- Android中Binder的学习
- 下拉刷新Phoenix分析
- android 预制32 64 位so, bin
- Android Studio运行NDK程序,简单的JNI实例
- Android Studio下使用JNI编程备忘录
- Android触摸事件(一)-AbsTouchEventHandle
- Android源码-Volley
- android中的事件传递机制(1)
- Android语音聊天