魅力程序猿

  • 首页
  • Java
  • Android
  • APP
    • 扑克计分器
    • Video Wallpaper
  • 联系我
  • 关于我
  • 资助
道子
向阳而生
  1. 首页
  2. Android
  3. 正文

Android面试题20–Android的View绘制

2018年3月16日 5384点热度 0人点赞 0条评论

基础知识

ViewRoot: 具体实现类ViewRootImpl,是连接WindowManager和DecorView的纽带,View的三大流程(mearsure、layout、draw)均是通过ViewRoot来完成。

DecorView: 作为根View,其实是一个FrameLayout,内部包含一个竖直方向的LinearLayout,这个LinearLayout分为标题栏和内容栏两个部分。

PhoneWindow: Window对象通常由PhoneWindow来实现的,PhoneWindow将一个DecorView设置为整个应用窗口的根View。

MearsureSpec:测量规格,包含测量要求和尺寸的信息,有三种模式:

模式 二进制数值 描述
UNSPECIFIED 00 默认值,父控件没有给子view任何限制,子View可以设置为任意大小。
EXACTLY 01 表示父控件已经确切的指定了子View的大小。对应LayoutParams中的’match_parent’和具体数值这两种模式
AT_MOST 10 表示子View具体大小没有尺寸限制,但是存在上限,上限一般为父View大小。对应LayoutParams中的’wrap_content’。

View的绘制流程

整个View树的绘制流程在ViewRoot类的performTraversals()函数展开,绘制函数的调用

再来看一张简化版的自定义View绘制流程函数调用链:

自定义View分类

类别 继承自 特点
View View SurfaceView 等 不含子View
ViewGroup ViewGroup xxLayout等 包含子View

自定义View流程:

步骤 关键字 作用
1 构造函数 View初始化
2 onMeasure 测量View大小
3 onSizeChanged 确定View大小
4 onLayout 确定子View布局(自定义View包含子View时有用)
5 onDraw 实际绘制内容
6 onTouchEvent 处理屏幕触摸事件。
7 invalidate 调用onDraw方法,重绘View中变化的部分。
8 提供接口 控制View或监听View某些状态。

 

 

 

标签: Android的View绘制
最后更新:2018年3月16日

daozi

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
搜索
联系方式

QQ群:179730949
QQ群:114559024
欢迎您加入Android大家庭
本人QQ:136049925

赐我一丝安慰
给我一点鼓励

COPYRIGHT © 2023 魅力程序猿. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备15000477号