要想搞清楚绘制流程,先要了解Android 中view的树结构。

从源码的角度解析一下上面的图:
首先 DecorView 的父类是个FrameLayout
然后就是下图进一步详细的说 带有TitleView ContentView
其中指导源码里面的视图就是这个 ,也行你会有疑问 Android 系统源码的xml资源文件在哪里?在frameworks/res
然后这个文件在PhoneWindow里面加载

然后phonewindow 给decorview 加载

所以说 DecorView 里面是 一个linearlayout 里面 有Titleview 和content 点视图。最外层是Phonewindow的Framelayout。当然这只是custom_tttle 源码中还有其他布局文件,比如 没有title的等等。

我们主要关注的是Activity ,ViewGroup ,View ,触摸事件的传递方向就是从上到下,再从下返回上,这种u型结构。表述一下:一个触摸事件触发,先来到Actvity的DispatchTouchEvent 方法,Activity接着去询问ViewGroup的dispatchTouchEnvent方法,你告诉我,ViewGroup调用onInterceptouchEvent问自己要不要拦截处理,我不拦截,好,那我问我的子view,调用view的dispachTouchEvent方法,view调用onTouchEvent()方法,到底了,开始往上反。第一种情况:true,告诉你们我处理了,那viewGroup的dispachtouchEvent方法收到true,好,儿子处理了,那我就不用调用我的onTouchEvent方法了,那我赶紧告诉activity,activity的dispachTouchEvent方法收到true的回答,那我Acitity也不用再调用ontouchEvent的方法了。第二种情况:子view 我ontouchEvnet 返回fasle, 告诉你们我不处理,那ViewGroup的dispachTouchEvent就收到fasle,既然儿子不处理,那我调用我的ontouchEvent方法,我的ontoucheEnvent 如果处理了,那Activity的就dispachTouchEvent 收到true,好,父亲干了,也行,我就不用调用ontouchEvnet了,反之,父亲也不干,false告诉你们,那activity的DispachTouchEvent 收到fasle,那activity还要调用ontouchEvent ,事件又回到了顶端。大家都不干。

还有个问题就是大家都不干的时候,为什么Activity 会来两遍

然后是绘制问题:


ViewRootImpl 类里面的 performTraversals 方法里面会分别调用performMeasure ,performlayout,performdraw方法,分别对应的是onMeasure,onLayout,onDraw 方法。



需要注意ViewGroup遍历子view的顺序问题,因为viewGroup和view 要遍历树的结构的,所以是从ViewGroup onMeasure 调用它的子view onMeasure,拿返回结果,再调用 自己的onlayout,先横着走,再竖着走。还有就是自定义view或viewGroup的时候, 自定义ViewGroup需要重写onmeasure ,onlayout ,ondraw是由子view完成的,它不需要管,自定义View 不用管onlayout方法,布局是它父控件的事,只需要重写onMeasure和ondraw方法就行。

Android View 详解相关推荐

  1. Android View详解(三) 视图状态及重绘流程分析

    转载:http://blog.csdn.net/guolin_blog/article/details/17045157 [本文出自郭霖的博客] 在前面一篇文章中,我带着大家一起从源码的层面上分析了视 ...

  2. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  3. Android菜单详解——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  4. Android LayoutInflater详解

    Android LayoutInflater详解 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类 似于findViewById().不同点是LayoutInflater是用来 ...

  5. android WebView详解,常见漏洞详解和安全源码(下)

    上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑.  上篇:android WebView详解,常见漏洞详解和安全源码(上)  转载请注明出处:http ...

  6. android WebView详解,常见漏洞详解和安全源码(上)

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析.  由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...

  7. android子视图无菜单,Android 菜单详解

    Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu) 选项菜单 可以通过两种办法增加选项菜单,一是在menu.xml中添加,该 ...

  8. Android StateFlow详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121913352 本文出自[赵彦军的博客] 文章目录 系列文章 一.冷流还是热流 S ...

  9. android fragment 优势,Android Fragment详解

    参考网址:Android Fragment详解 一.什么是Fragment? Fragment:是Android3.0开始新增的概念,意为碎片.Fragment是依赖于Activity的,不能独立存在 ...

最新文章

  1. 今天聊聊分布式锁 No.86
  2. 设置读取plc时间_最简单的一种方法来step7 读取PLC时间日期
  3. 【Linux环境】阿里云CPU使用率 100% ECS 同时连接数峰值 25k+ 问题排查无果(附阿里云重新初始化云盘详细步骤)
  4. centos7安装python-pip
  5. zabbix3.0.4通过jmx监控tomcat
  6. Java预科篇1-学前
  7. 大家可以放心了!Redmi K20将配备双频GPS
  8. 精品 德国 软件推荐   著名的光盘烧录软件 Nero
  9. linux重启网卡命令_如何在 Linux 中更改 MAC 地址 | Linux 中国
  10. 通过UDP广播实现Android局域网Peer Discovering
  11. 浅学DSP原理及应用
  12. PLC通讯实现-C#实现欧姆龙以太网通讯FINS UDP(三)
  13. 【转】完美:photoshop cs6 破解版下载[序列号+破解补丁+破解教程+官方原版]
  14. vba中FreezePanes(冻结窗格)用法
  15. Unity Recorder屏幕录制问题
  16. 国内外有哪些做小样本学习(Few-Shot Learning)的优秀团队?
  17. 在img的图片上添加文字
  18. 【机器学习】为什么机器学习难于应用
  19. Games101 学习笔记
  20. Note For Linux By Jes(20)-Linux 核心编译与管理

热门文章

  1. 【调试】:发布的版本如何利用pdb调试?
  2. Excel快速翻译英语句子为中文
  3. 区块链之加解密算法数字证书
  4. windows电脑使用Edge浏览器过程中偶发自动重启
  5. LeetCode 6 ZigZag Conversion(Z型转换)(String)
  6. tp报错: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is
  7. 杰里之AC696 列 系列 高关功放在软关机下的处理【篇】
  8. LaTeX 提取,合并多个pdf页
  9. SolidWorks 2018 初学基础到精通详细视频教程
  10. 在虚幻引擎5中构建你的首款游戏 - 04 - 地形和草地