ViewRoot和DecorView
来源:互联网 发布:qq群发推广软件 编辑:程序博客网 时间:2024/04/30 08:58
ViewRoot实际是一个Handler,ViewRoot建立主View与WindowsManger通讯的桥梁。ViewRoot在本质上一个Handler。我们知道Handler的基本功能就是处理回调,发送消息。ViewRoot 对应于ViewRootImpl类,View的三大流程都是通过ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完毕之后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView建立关联。
ViewRoot对触屏事件的处理:
public final class ViewRoot extends Handler implements ViewParent, View.AttachInfo.Callbacks { @Override public void handleMessage(Message msg) { switch (msg.what) { case DISPATCH_POINTER: { MotionEvent event = (MotionEvent) msg.obj; try { deliverPointerEvent(event); } finally { event.recycle(); if (msg.arg1 != 0) { finishInputEvent(); } } } break; } }ViewRoot接收到触屏事件,调用deliverPointerEvent方法,deliverPointerEvent的代码如下:
private void deliverPointerEvent(MotionEvent event) { boolean handled; boolean isDown = event.getAction() == MotionEvent.ACTION_DOWN; handled = mView.dispatchTouchEvent(event); if (!handled && isDown) { final int edgeFlags = event.getEdgeFlags(); if (edgeFlags != 0 && mView instanceof ViewGroup) { View nearest = FocusFinder.getInstance().findNearestTouchable( ((ViewGroup) mView), x, y, direction, deltas); if (nearest != null) { mView.dispatchTouchEvent(event); } } }事件最终会交给dispatchTouchEvent进行处理。
DecorView作为顶级View,一般情况下它内部会包含一个竖直方向的LinearLayout,在这个LinearLayout里面有上下两个部分,上面是标题栏,下面是内容栏。通过源码我们可以知道,DecorView其实是一个Framglayout,View层的事件都先经过DecorView,然后才传递给我们的View。
1 0
- ViewRoot和DecorView
- 015.ViewRoot和DecorView
- 【View工作原理】ViewRoot、DecorView、MeasureSpec和LayoutParams
- View的工件原理:认识ViewRoot和DecorView
- ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
- View的工作原理(一)——从ViewRoot和DecorView说起
- ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
- 自定义View基础(一)——追根溯源,透过源码认识ViewRoot,DecorView和performTraversals方法
- ViewRoot:处理消息+WMS交互+控制DecorView
- Android 中Activity、Window、ViewRoot、DecorView之间的联系
- Window、Activity、DecorView以及ViewRoot之间的关系
- Window、Activity、DecorView以及ViewRoot之间的关系
- Window和DecorView
- ViewRootImpl 和 DecorView 分析
- Android 从0开始自定义控件之 ViewRoot 与 DecorView (五)
- android view的讲解 之 View的工作原理(decorView,viewRoot讲解)(一)
- ViewRoot$CalledFromWrongThreadException 和内存泄漏
- android ViewRoot学习,WindowManager和ViewRoot的关系
- 【杭电】[2076]夹角有多大
- Java总结篇系列:Java泛型
- 很有帮助学习递归:从简单到复杂。
- 第一次写博客
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- ViewRoot和DecorView
- Java基于IBMMQ消息的发布与订阅
- winform自定义控件
- java的异常处理
- ant使用全总结_ant教程_ant打包apk_ant如何使用
- 表单提交中form.action,form.submit()问题
- 质数mark
- <转>Alibaba-AndFix Bug 热修复 以及添加到自己项目中
- 【LeetCode-23】Merge k Sorted Lists