Android view的绘制过程

原创 2016年08月30日 10:57:50

恩!我要写博客加深记忆,学到的东西就要记录下来!坚持吧~
一.测量
1.由一个父view调用子view的measure(int widthMeasureSpac,int heightMeasureSpac)方法
此方法会得到由父View提供给子view推荐的长和宽(这两个值并不是最后子view的最终大小,而是父view
提供给子view用来计算大小的)。
2.widthMeasureSpac和heightMeasureSpac是两个32位的int值,高两位代表测量模式,后三十位代表
尺寸值。
3.测量模式分为三种,AT_MOST代表一个最大值模式,一般子View设置wrap_content时因为不能确定子view
的大小所以会使用这种测量模式,EXACTLY代表精准模式,一般来说当view设置固定的尺寸值以及view使用
match_parent时view可以获得到精确的值(直接是父view的大小),UNSPECIFIED这种模式是不确定的,view
想要多大就给多大,一般这种模式不常用(ListView的item的高度就是想要多高就有多高)。
4.子view在measure方法里面会计算出自己的高度,然后调用自己onMeasure(int widthMeasureSpac,int heightMeasureSpac)在此方法里面会调用setMeasuredDimensions(int widthMeasureSpac,int
heightMeasureSpac)方法最终确定自己大小。
5.一般我们覆盖子view的onMeasure方法自定义view的测量(比如当前view的宽超过父view时进行换行)。
6.几个重要的小知识点,可以通过getMeasuredWidth和getMeasureHeight拿到子view的宽度和高度(但必须在测量过程完成之后)
二.布局
1.父viewGroup会调用子view的onLayout(int l,int t,int r,int b)方法,这个方法传给子view左上
和右下四个坐标点。
2.子view拿到这四个坐标点会通过LayoutParams计算margin等然后调用自己的Layout方法最终确定自己的
位置。
3.view的layout方法是final的,是不能被覆盖的,而viewGroup里的onLayout方法是一个抽象方法,我们
一般会重写这个方法来定义viewGroup。
三.绘制
1.大小和位置确定下来之后就只剩下绘制了。
2.首先由父view的DispatchDraw方法分发绘制,遍历调用子view的draw方法,而draw会调用onDraw方法完成
最终的绘制。
3.几个重要的小知识点,invalidate重绘方法和computerScroll方法(写Scroller时候会重点写这个方法的作用)

Android View绘制流程(看过最详细的一篇)

一、官方文档      先是看了一下官方的文档, 地址是http://developer.android.com/guide/topics/ui/how-android-draws.html...
  • u011052996
  • u011052996
  • 2015年03月31日 14:03
  • 2137

View绘制详解(三),扒一扒View的测量过程

所有东西都是难者不会,会者不难,Android开发中有很多小伙伴觉得自定义View和事件分发或者Binder机制等是难点,其实不然,如果静下心来花点时间把这几个技术点都研究一遍,你会发现其实这些东西都...
  • u012702547
  • u012702547
  • 2016年10月04日 13:37
  • 3537

Android应用层View绘制流程与源码分析

【工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果】1 背景还记得前面《Android应用setContentView与LayoutInflate...
  • yanbober
  • yanbober
  • 2015年05月31日 16:30
  • 105306

说说View的绘制流程(一)

在我们的Android项目开发过程中,相信大家肯定会涉及到对View流程绘制的相关开发(比如:自定义控件)。本文试着从源码(Android 10,我们之所以选择API 10源码,是为了尽量减少一些主题...
  • Johnnyz1234
  • Johnnyz1234
  • 2015年05月31日 19:46
  • 1150

Android View 绘制流程 及 自定义View

View绘制流程调用链图 记清楚函数调用的顺序才能准确地进行调用。 根据调用链,可将整个绘制过程分为三部分:Measure - Layout - Draw Measu...
  • asdf717
  • asdf717
  • 2016年09月19日 14:29
  • 579

Android知识架构 · 电话面试 · View的绘制流程

View的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()各步骤的主要工作: OnMeasure():测量视图大小。从顶层父View到子View递归调用measure方...
  • carter_yu
  • carter_yu
  • 2016年09月12日 21:25
  • 1620

Android的视图绘制与事件分发流程(底层)

本文我们来简单的分析下Activity的SetContentView方法底层是如何对我们的layout.xml文件进行处理,然后分析一下事件是如何从WindowManagerService中传递到Vi...
  • evan_man
  • evan_man
  • 2016年08月13日 15:26
  • 1015

Android View框架总结(六)View布局流程之Draw过程

请尊重分享成果,转载请注明出处:  http://blog.csdn.net/hejjunlin/article/details/52236145 View的Draw时序图ViewRootIm...
  • xiongkai520520
  • xiongkai520520
  • 2016年09月08日 17:12
  • 619

Android View绘制三大流程探索及常见问题

View绘制的三大流程,指的是measure(测量)、layout(布局)、draw(绘制) measure负责确定View的测量宽/高,也就是该View需要占用屏幕的大小,确定完View需要占用的...
  • zhuwentao2150
  • zhuwentao2150
  • 2016年12月20日 16:14
  • 1683

Android绘制View相关的几个问题

前面关于View绘制的话题好像零散的写过博客,虽然好久没有认真的研究一些东西了,平时忙其他的东西,但是本着每个月必须花几天时间看看android的想法,今天整理了几个View绘制相关的问题,这里不会涉...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2016年06月21日 10:50
  • 3094
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android view的绘制过程
举报原因:
原因补充:

(最多只允许输入30个字)