关闭

Android view的绘制过程

标签: android博客view的绘制流程
98人阅读 评论(0) 收藏 举报
分类:

恩!我要写博客加深记忆,学到的东西就要记录下来!坚持吧~
一.测量
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时候会重点写这个方法的作用)

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:103次
    • 积分:11
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行
    评论排行