博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android如何自定义一个view——绘制篇
阅读量:6231 次
发布时间:2019-06-21

本文共 941 字,大约阅读时间需要 3 分钟。

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最重要的三个步骤,理解了这三步,就在准确的位置,准确的大小画出你想要的图形了。

转载地址:http://loxna.baihongyu.com/

你可能感兴趣的文章
MFC 程序入口和执行流程
查看>>
Spring+SpringMVC+MyBatis深入学习及搭建(五)——动态sql
查看>>
【7】异常处理
查看>>
201621123057 《Java程序设计》第9周学习总结
查看>>
题目1081:递推数列 (矩阵快速幂解递推式)
查看>>
【转】 FRTO—虚假超时剖析
查看>>
html区块元素
查看>>
json数据结构
查看>>
使用classList来实现两个按钮样式的切换
查看>>
二分匹配 飞行员配对方案问题
查看>>
几个著名java开源缓存框架的介绍
查看>>
CSS核心内容:层叠和继承
查看>>
windwos phone 的listbox 的各种细节
查看>>
Resin
查看>>
理解Android虚拟机体系结构(转)
查看>>
Redis系列之(一):10分钟玩转Redis(转)
查看>>
调试逆向分为动态分析技术和静态分析技术(转)
查看>>
上传文件的大小限制 专题
查看>>
基于KMP与Levenshtein模糊匹配算法的银行联行号查询(转)
查看>>
BZOJ1303 中位数图
查看>>