Chinaunix首页 | 论坛 | 博客
  • 博客访问: 403653
  • 博文数量: 78
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 940
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-25 09:39
文章分类

全部博文(78)

文章存档

2016年(7)

2015年(1)

2014年(35)

2013年(35)

我的朋友

分类: Android平台

2014-11-27 17:44:31


每一个视图的绘制过程都必须经历三个最主要的阶段,即onMeasure()onLayout()onDraw()

1.    onMeasure()方法用于测量视图的大小。

View系统的绘制流程会从ViewRootperformTraversals()方法中开始,在其内部调用Viewmeasure()方法。measure()方法接收两个参数,widthMeasureSpecheightMeasureSpec,这两个值分别用于确定视图的宽度和高度的规格和大小。MeasureSpec的值由specSizespecMode共同组成的,其中specSize记录的是大小,specMode记录的是规格。通常情况下,这两个值都是由父视图经过计算后传递给子视图的,说明父视图会在一定程度上决定子视图的大小。如果你不想使用系统默认的测量方式,可以按照自己的意愿重写onMeasure()方法。

2.    onLayout()方法用于给视图进行布局,确定视图的位置。

ViewRootperformTraversals()方法会在measure结束后继续执行,并调用Viewlayout()方法来执行此过程。ViewGroup中的onLayout()方法是一个抽象方法,这就意味着所有ViewGroup的子类都必须重写这个方法。如:LinearLayoutRelativeLayout等布局,都是重写了这个方法,然后在内部按照各自的规则对子视图进行布局的。

3.    onDraw()方法对视图进行绘制。

重写onDraw()方法,并且在里面执行绘制逻辑。绘制的方式主要是借助Canvas这个类,它会作为参数传入到onDraw()方法中,供给每个视图使用。


按类型划分,自定义View的实现方式大概可以分为三种:自绘控件、组合控件、以及继承控件。注意,自定义的View在使用的时候一定要写出完整的包名,不然系统将无法找到这个View

1.    自绘控件

View上所展现的内容全部都是我们自己绘制出来的。绘制的代码是写在onDraw()方法中。

2.    组合控件

不需要自己去绘制视图上显示的内容,而只是用系统原生的控件,将几个系统原生的控件组合到一起,这样创建出的控件就被称为组合控件。

3.    继承控件

我们不需要自己重头去实现一个控件,只需要去继承一个现有的控件,然后在这个控件上增加一些新的功能,就可以形成一个自定义的控件。

阅读(1390) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~