本人菜鸟一枚,自己没那个水平研究出view的绘制流程,不过经过各种查阅前辈大牛的资料或者博客知道了view的绘制过程分为onMeasure,onLayout,onDraw三个重要的过程,姑且拿来作为结论来指引自己对Android绘图的的学习,少走了很多的弯路。下面就贴上自己的心得和体会,不对之处欢迎批评指正,共同学习。

开篇之前先说说View和ViewGroup之间的关系,ViewGroup是View的子类,但同样的ViewGroup里面也封装了许多个View的引用包括View集合的引用,这点看源码就可以看出来,从设计模式上来说是典型的组合模式,所以他们之间的关系可以用如下图所示:

当然也可以有其他的树形结构。

View类:

1) view的onMeasure在measure方法里调用,在onMeasure会调用setMeasureDimension(intmeasureWidth,int measureHeight)来完成measure过程.onMeasure方法来完成具体的测量逻辑,需要注意的是measure是final方法,当你要实现自己的测量逻辑的时候在子类中是不能重写measure方法的,只能重写onMeasure方法来完成自己的测量逻辑

2)onLayout方法在View类里面是个空方法,由子类去完成

3)同样onDr

view绘制流程学习心得相关推荐

  1. 【朝花夕拾】Android自定义View篇之(一)View绘制流程

    前言 转载请申明转自[https://www.cnblogs.com/andy-songwei/p/10955062.html]谢谢! 自定义View.多线程.网络,被认为是Android开发者必须牢 ...

  2. 【朝花夕拾】Android自定义View之(一)手把手教你看懂View绘制流程——向源码要答案

    前言 原文:Android自定义View之(一)手把手教你看懂View绘制流程--向源码要答案 View作为整个app的颜值担当,在Android体系中占有重要的地位.深入理解Android View ...

  3. Android自定义View之(一)View绘制流程详解——向源码要答案

    前言 View作为整个app的颜值担当,在Android体系中占有重要的地位.深入理解Android View的绘制流程,对正确使用View来构建赏心悦目的外观,以及用自定义View来设计理想中的酷炫 ...

  4. View绘制流程的入口

    View绘制流程的入口是WindowManager.add(decor, l),从Activity的创建开始分析,具体流程如下: Activity.onCreate() setContentView( ...

  5. android字符显示流程图,Android应用层View绘制流程与源码分析

    1  背景 还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原 ...

  6. View 绘制流程分析

    掌握 View 绘制流程能对视图的各个绘制时机有更深刻的认识,并且能写出更好的自定义 View, 反正看源码(SDK28)就完了. 一.介绍 二.源码分析 measure layout draw 三. ...

  7. Android 系统(230)---View 绘制流程 —— 基础(1)

    View 绘制流程 -- 基础(1) View 绘制流程 -- 基础 1. View分类 类别 解释 特点 单一视图 即一个View,如 TextView 不包含子View 视图组 即多个View组成 ...

  8. android 绘图流程,Android View绘制流程

    前言 不知道大家有没有想过一个问题,当启动一个Activity的时候,相应的XML布局文件中的View是如何显示到屏幕上的?有些同学会说是通过onMeasure().onLayout().onDraw ...

  9. Android自定义View绘制流程

    Android视图层次结构简介 在介绍View绘制流程之前,咱们先简单介绍一下Android视图层次结构以及DecorView,因为View的绘制流程的入口和DecorView有着密切的联系. 我们平 ...

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

    前言 Activity中界面加载显示的基本流程原理,最终分析结果就是下面的关系: 看见没有,如上图中id为content的内容就是整个View树的结构,所以对每个具体View对象的操作,其实就是个递归 ...

最新文章

  1. if not exist Oracle,oracle 兑现 if not exist 方法
  2. mysql increment by_Mysql设置auto_increment_increment和auto_increment_offset
  3. 一道小学数学题引发的“纷争” 产科医生给出解答
  4. awk分割列 输出时间相关
  5. Mac升级macOS Big Sur之前如何优化并增加内存空间?
  6. 游戏策划入门教程(1)工具篇
  7. 单例模式【饿汉模式和懒汉模式异同点】
  8. python rtf读取_如何使用Python读取RTF文件,python,格式,的
  9. 清华大学朱小燕教授做客雷锋网沙龙,分享 NLP 和人工智能的那些事儿| AAAI 2017...
  10. Android-Studio中AndroidManifest-xml文件中application标签
  11. Macropodus 新词发现详解(new word discovery, python3)
  12. 学大数据应该会什么?
  13. 水下导弹发射环境因素建模需求及其扫盲笔记
  14. 元宇宙大热,DiDi message将成为未来世界的连接器
  15. 闲人闲谈之十二——关于工程项目报价综合业务实现
  16. 剖析Android移动开发程序员的职业发展之路
  17. 什么是X.509证书?X.509证书工作原理及应用?
  18. Error in file(file, “rt“) : cannot open the connection In addition: Warning message:In file(file, “
  19. 66句震撼人心的禅语(转)
  20. [SDOI2010]地精部落解题报告

热门文章

  1. winxp java 控制台_winxp系统设置java环境变量的详细教程
  2. java8 metaspacesize_java-8 – Java8 MetaspaceSize标志不起作用
  3. jQuery特效:实现瀑布流
  4. Python函数参数的值传递机制
  5. pytorch在anaconda下安装
  6. 二叉搜索树的学习笔记(有解释)
  7. 多GPU环境运行实验的一点经验
  8. 深度学习中常见的Normalization总结—Batch Normalization,Instance Normalization
  9. 90+深度学习开源数据集整理|包括目标检测、工业缺陷、图像分割等多个方向...
  10. ubuntu16.04下编译安装Autoware