Android View 详解
要想搞清楚绘制流程,先要了解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 详解相关推荐
- Android View详解(三) 视图状态及重绘流程分析
转载:http://blog.csdn.net/guolin_blog/article/details/17045157 [本文出自郭霖的博客] 在前面一篇文章中,我带着大家一起从源码的层面上分析了视 ...
- 【转】Android菜单详解——理解android中的Menu--不错
原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...
- Android菜单详解——理解android中的Menu
前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...
- Android LayoutInflater详解
Android LayoutInflater详解 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类 似于findViewById().不同点是LayoutInflater是用来 ...
- android WebView详解,常见漏洞详解和安全源码(下)
上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑. 上篇:android WebView详解,常见漏洞详解和安全源码(上) 转载请注明出处:http ...
- android WebView详解,常见漏洞详解和安全源码(上)
这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 由于博客内容长度,这次将分为上下两篇,上篇详解 WebView ...
- android子视图无菜单,Android 菜单详解
Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu) 选项菜单 可以通过两种办法增加选项菜单,一是在menu.xml中添加,该 ...
- Android StateFlow详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121913352 本文出自[赵彦军的博客] 文章目录 系列文章 一.冷流还是热流 S ...
- android fragment 优势,Android Fragment详解
参考网址:Android Fragment详解 一.什么是Fragment? Fragment:是Android3.0开始新增的概念,意为碎片.Fragment是依赖于Activity的,不能独立存在 ...
最新文章
- 今天聊聊分布式锁 No.86
- 设置读取plc时间_最简单的一种方法来step7 读取PLC时间日期
- 【Linux环境】阿里云CPU使用率 100% ECS 同时连接数峰值 25k+ 问题排查无果(附阿里云重新初始化云盘详细步骤)
- centos7安装python-pip
- zabbix3.0.4通过jmx监控tomcat
- Java预科篇1-学前
- 大家可以放心了!Redmi K20将配备双频GPS
- 精品 德国 软件推荐 著名的光盘烧录软件 Nero
- linux重启网卡命令_如何在 Linux 中更改 MAC 地址 | Linux 中国
- 通过UDP广播实现Android局域网Peer Discovering
- 浅学DSP原理及应用
- PLC通讯实现-C#实现欧姆龙以太网通讯FINS UDP(三)
- 【转】完美:photoshop cs6 破解版下载[序列号+破解补丁+破解教程+官方原版]
- vba中FreezePanes(冻结窗格)用法
- Unity Recorder屏幕录制问题
- 国内外有哪些做小样本学习(Few-Shot Learning)的优秀团队?
- 在img的图片上添加文字
- 【机器学习】为什么机器学习难于应用
- Games101 学习笔记
- Note For Linux By Jes(20)-Linux 核心编译与管理
热门文章
- 【调试】:发布的版本如何利用pdb调试?
- Excel快速翻译英语句子为中文
- 区块链之加解密算法数字证书
- windows电脑使用Edge浏览器过程中偶发自动重启
- LeetCode 6 ZigZag Conversion(Z型转换)(String)
- tp报错: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is
- 杰里之AC696 列 系列 高关功放在软关机下的处理【篇】
- LaTeX 提取,合并多个pdf页
- SolidWorks 2018 初学基础到精通详细视频教程
- 在虚幻引擎5中构建你的首款游戏 - 04 - 地形和草地