不看你会后悔的 View 绘制基础

11 篇文章 0 订阅

1e97da0737325a6483ccfebbe0ed9c36da93a5137961c-1j0DuG_fw658.png

前言

自定义 View 时Android 开发中的一个热点知识,我们结合源码了解绘制 View 的必备知识。

流程

  • measure 测量
  • layout 位置
  • draw 绘制

measure 测量

view 大小的测量是在 onMeasure 中实现的,测量过程用到了MeasureSpac,MeasureSpec是一个int类型的值,由高2位的规格模式和低30位的具体尺寸,由父View的MeasureSpec和子View的LayoutParams(LayoutParams就是我们在xml写的时候设置的layout_width和layout_height 转化而来的)通过计算得出一个针对子View的测量规格。

image.png

  • MeasureSpac=测绘模式+数值
三种测绘模式:
1. EXCATlY 精确值模式:当我们在布局文件中定义准确的 dp 数值或者“match_parent”时,使用的就是精确值模式。
2. AT_MOST 最大值模式,使用 “warp_content” 时,根据内部元素大小确定,但不能大于父类控件的大小。
3.UNSPECIFIED View大小随意,一般在自定义View 才使用

layout 位置

怎样确定子控件在父控件中的位置?

我们用图说话
image.png

原谅我的PS绘图,通过子控件的四个参数(left,right,top,bottom)就能知道在父类控件中的位置。

控件左上角(left,top),控件右上角(bottom,right)

Let us read the fucking code:

image.png

draw 绘制

绘制是自定义 View 最最最最最最重要的部分。 Draw 用于把 view 绘制到屏幕上。

View 的绘制流程:
1. 绘制背景 background.draw(Canvas)
2. 绘制自己 onDraw()
3. 绘制子View dispatchDraw
4. 绘制装饰 onDrawScrollBars

View 会调用 dispatchDraw 遍历地掉用子控件的draw方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值