Android中 View的绘制分为三步。

  1. measure —— 用于得知(子)View的大小
  2. layout —— 摆放好(子)View的位置
  3. draw —— 真正绘制View的内容

因为Android的layout系统是一个考虑好相对布局的一个系统,我们知道ViewGroup是继承于View的,思想上可以把ViewGroup当成是一个View的组合

我们看看在三个函数里分别做了什么。

onMeasure

这个函数主要传入两个参数

javavoid onMeasure(int widthMeasureSpec, int heightMeasureSpec)

一个代表宽度的参数,一个代表高度的参数。
这里的宽度参数是父容器的一些参数,它并不仅仅是数值,它用了位运算,根据相应的掩码能得到父容器能给与子容器的宽度,有EXACTLY,UNSPECIFIEDAT_MOST三个值,分别说明:

  1. EXACTLY 父容器希望子视图有它指定的大小
  2. UNSPECIFIED 父容器可以无限容纳子容器,子视图要多大都可以
  3. AT_MOST 父容器指定了最大的大小,让子视图自行决定大小。

根据这些算出大小后,父容器就知道自己应该占多少的空间,同时报告给它的父容器,在这个时候,也可以把子容器应该有的大小记下来,一会在onLayout中用。

onLayout

这个函数声明如下:

javavoid onLayout(boolean changed, int l, int t, int r, int b)

第一个参数表明大小位置是否变动过,剩下的4个参数分别代表该容器的lefttoprightbottom,容器可以根据这个参数,直接得出它现在的宽度,高度,位置等,如果它是一个ViewGroup,那么它可以根据这些参数为它的子视图进行布局。

onDraw

好了,这个是最后的一个步骤了,就是画。
传入的参数就是Canvas 一个画布,你可以在这个画布上绘制你要的各种样式,
这时候调用getWidthgetHeight都是安全的,因为已经经过了onLayout的步骤了。

以上是Android中自定义View最重要的三个步骤,理解了这三步,就在准确的位置,准确的大小画出你想要的图形了。

更多相关文章

  1. android 存储操作 大小显示换算 kb mb KB MB 读取
  2. android 开发使用 kotlin 进行点击事件监听和界面跳转,直接传也方
  3. Android获得文件夹大小
  4. Android RectF类的构造函数参数说明
  5. Android RadioButton 图片位置和大小
  6. Android TabLayout设置选中状态标题字体大小,粗细
  7. Android Button,TextView的显示大小写问题
  8. android 广播传参数
  9. android改变全局字体大小

随机推荐

  1. Android开发傻瓜入门-开发自己的手机短信
  2. 终于找到一个类似wince 远程桌面控制andr
  3. Android之——Surface、SurfaceView与Sur
  4. 从源码看ANDROID中SQLITE是怎么通过CURSO
  5. android检查网络连接状态的变化,无网络时
  6. Introducing Quick Search Box for Andro
  7. Android具有粘性的小球,跌落反弹形成文字
  8. Android Studio安装后打不开
  9. Jenkins+Ant+Android+Robitium 实例详解(
  10. Android Studio svn检出项目一直报错