Android 自定义View(一)

1、自定义控件

android提供了大量标准的控件:TextView、EditText、Button等。在某些场景下,可能不能满足设计要求,所以需要开发自己定义控件。

会遇到的问题:

  (1)性能。继承于View,继承得越多,性能就可能会降低。View嵌套View会变慢。

  (2)布局嵌套复杂

(3)需要手绘界面

2、View的生命周期

体验View的生命周期

MyView.java

(1)Constructor表示构造,在布局中插入一个tag,这个tag就是一个控件,表示要来调用constructor。

(2)parent calls addView(),表示父元素会调用addView方法,将该控件,挂到父元素下。  

(3)onAttachedToWindow()。表示整个界面附加到窗口时提供了一个回调方法。

(4)measure().android os会根据界面元素的布局信息,来整体测量,目的是把界面元素都绘画出来,绘画过程需要考虑每个元素的布局大小,这个过程就是一个measure。经过measure后,当前控件,绘制的大小就会明确。

(5)onMeasure(),回调,当测量完毕后,执行该方法。

(6)layout(),表示android os,开始布局。根据计算出来的大小,开始绘制界面

(7)onLayout().回调,表示布局结束后,执行该方法。

(8)dispatchDraw().android os,开始绘制

(9)draw(),android os,绘制

(10)onDraw(),回调,表示绘制完毕了,执行该方法。

(11)invalidate(),重新绘制。让android os重新开始绘制

(12)requestLayout(),重新测量,重新绘制。

3、创建一个最简单的自定义控件。

(1)必须继承View

(2)对于view构造函数要全部创建。保证layout中可以由xml代码转换成java代码。

(3)需要同步一下

(4)在Layout中引用该自定义控件,需要带上全路径的类名。

【案例】自定义控件

项目结构:

MyView.java

 

activity_main.xml

 

效果:


4、自定义控件中,使用xml文件方式插入控件时,如何添加自定义属性?

步骤:

(1)在values文件夹下建立attrs.xml

(2)在其中创建Styleable资源

(3)在这个Styleable资源中创建自定义属性,并指定该属性的数据类型,通过format。

(4)在Layout中引用自定义控件时,可以指定自定义属性app:XXX

(5)在自定义控件中获取自定义属性的值,是通过构造函数中attrs来获取属性值

项目结构:

attrs.xml

activity_main.xml

MyView.java

日志:

【案例】继续改造自定义控件

修改onDraw

activity_main.xml

效果:

5、onMeasure方法

是一个测量布局方法执行后的回调方法,用于提供给开发者设置当前自定义控件的size

注意:

使用该方法,最后需要执行setMeasuredDimension(width,height),让设定的size生效。

MeasureSpec的mode有3种:

(1)Exactly,精确尺寸

(2)At Most,最大尺寸

(3)Unspecified,未指定

【案例】体验测量

日志:

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值