2017/10/2 上午 学习笔记
来源:互联网 发布:centos 路由器 编辑:程序博客网 时间:2024/04/23 14:12
View的绘制流程
1.首先是measure 即为获取View的宽高
需要注意的是measure方法为final方法,因此该方法是不能重写的,如果我们想写一个自定义View就去重写onMeasure()方法。
MeasureSpec作为View的内部类,在我的理解中它分为两部分,一部分是specMode,一部分是specSize,前者决定了View的测量模式,
测量模式有三种:确定模式(EXACRLY)(MATCH_PARENT为此模式),最大模式(AT_MOST)(WRAP_CONTENT为此模式),非确定模式(UNSPECIFIED)(自己写宽高)。
View的大小有父容器View的MeasureSpec和子View的布局信息共同决定,DecorView作为最底层View,它的父容器信息一般为屏幕大小。
在每次测量结束的时候都会调用setMesureDimension()才会生效,这点在我们重写onMesure方法的时候需要注意。
另外,在Activity的onResume生命周期执行之前,我们是无法通过getWidth这类方法获取到View的宽高信息的,因为我们还未进行View的测量。
2.Layout,布局
其实整个布局操作都是由父容器View执行的,而ViewGroup的onLayout()方法是一个抽象方法,因此我们在写一个自定义ViewGroup的时候,必须要重写onLayout()方法才可以。
我们都知道Visible属性当我们设置Gone属性的时候,我们知道View是不会占用空间的,这是因为在OnLayout方法中,当改属性为Gone时,不会对子View进行布局。
这一步执行完成后就可以获取到View的宽高了,因为宽高是通过左上右下坐标计算的。
3.Draw 绘制
View的Draw方法的大概步骤:
step1:绘制View背景
step2:判断是否需要绘制边框渐变效果,如果需要则走step3.1,否则走step4.1
step3.1:保存canvas的边框参数,(渐变效果是在左上右下四个位置绘制的,例如ListView滑动到最后一个时的效果),创建额外的图层去进行渐变效果的绘制
step3.2:绘制View
step3.3:绘制View的子View
step3.4:绘制边框渐变效果
step4.1:绘制View
step4.2:绘制子View
step5:绘制滚动条效果
end
上述的过程中,绘制背景,绘制边框渐变,绘制滚动条都是在父控件中完成的。
- 2017/10/2 上午 学习笔记
- 2017/10/04(上午)学习日记
- 学习笔记3 上午 C# 数组,集合
- 2014/10/2 上午读书记
- python基础学习(2017/3/1)上午
- 2007年2月26日上午的学习
- 10-30上午测试(DAY 2 R1)
- 黑羽祭历年题笔记-上午卷
- 系统分析师上午试题笔记 软件工程一
- 系统分析师上午试题笔记 软件工程二
- Java 回顾笔记5(上午)_static
- Java 回顾笔记6 (上午)_继承
- 2010年9月10号上午:
- 09年上半年软考上午题第六题笔记
- 2012.12.26日上午 学习如何配置内核
- C语言学习第十三天上午(结构体)
- 2017跟着小虎玩着去软考--趣味好玩解析2015年下半年信息系统项目管理师上午试题6-10题
- 软考新思维--2017年上半年信息系统项目管理师上午试题分析与答案(试题6-10题)
- 在CSDN自己的博客栏新增一个友情链接
- 阿里云视频直播
- [BZOJ]1226 [SDOI2009]学校食堂Dining
- Jzoj3805 小X的二叉堆计数
- @async
- 2017/10/2 上午 学习笔记
- python字符串操作举例
- java中的冒泡排序,插入排序,快速排序
- C++GUI Programming with QT学习笔记day01
- 1021 石子归并-51Nod
- oracle分区表详解
- Qt 学习之路 2(60):使用 DOM 处理 XML
- 项目管理的挣值计算,一张思维导图全搞定
- 中小型研发团队架构落地实践18篇,含案例、代码