View绘制元素

在介绍视图绘制之前,先来了解一下一个视图中都包含哪些需要绘制的元素,比如一个TextView,
除了具体的文字外,还需要绘制文字的背景等。那么,视图中都包含哪些绘制元素呢?

总的来讲,绘制元素包含四个,分别如下:

  1. View背景。每个视图都有一个背景,比 如 LinearLayout、 TextView,背景可以是一个颜色值,
    也可以是一幅图片,甚至可以是任何Drawable对象,比如一个Shader、一 个DrawableState等 。
    应用程序可以使用 setBackgroundColor()、 setBackgroundDrawable()>setBackgroundResouce()三个
    函数设置不同的背景。
  2. 视图本身的内容。比如,对 于 TextView而言,内容就是具体的文字,对 于 一 个ImageButton而
    言,内容就是一幅图片。应用程序会在视图的onDraw()函数中绘制具体的内容。
  3. 渐变边框,英文名称是Fading Edge。渐变边框的作用是为了让视图的边框看起来更有层次感,
    其本质是一个Shader对象。
  4. 滚动条,英文名称是ScrollBar。与 PC上的滚动条不同, Android中的滚动条仅仅是显示滚动的
    状态,而不能被用户直接下拉。

绘制过程从ViewRoot的 performTraversals()函数中开始,首先调用,ViewRoot中 的 draw()函数,该函数中进行一定的前端处理后,再调 用mView.draw()。 mView对象就是窗口的根视图,对 于 Activity而
言,就是 PhoneWindow.DecorView 对象。
在一般情况下,View对象不应该重载dmw()函数,因此,mView.draw()就调用到了 View类 的 draw()
函数。该函数的内部过程也就是View系统绘制过程的核心过程,该函数中会依次绘制上一节所讲的四
种绘制兀素,其中绘制视图本身的具体实现就是回调onDraw()函数,应用程序一^般 会 重 载onDraw()函
数以绘制所设计的View的真正界面内容。
绘制完界面内容后,如果该视图内部还包含子视图,贝U调 用 dispatchDraw()函数, ViewGroup重载
了该函数。因此,实际调用的是ViewGroup中 的dispatchDraw()函数,应用程序不应该再重载ViewGroup
类 中 的 dispatchDmwO函数,因为该函数内部已经有了默认的实现,并且该实现代表了 View系统的内
部流程。
dispatchDraw()内 部 会 在 一 个for()循环语句中,循 环 调 用 drawChild()分别绘制每一个子视图,而
drawChild()内 部 又 会 调 用draw()函数完成子视图的内部绘制工作。当然,如果子视图本身也是一个
ViewGroup,就会递归执行以上流程。
从以上设计思路来看,它 与measure及 layout的过程极其相似。
下面就具体来看以上主要函数的内部执行过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值