首页 理论教育 自定义View类控件实现方法

自定义View类控件实现方法

时间:2023-06-27 理论教育 版权反馈
【摘要】:在自定义View类重写onDraw方法。自定义View的属性在res/values下面新建attrs.xml属性文件。自定义属性分两类:定义公共属性和定义控件的主题样式。上面的XML文件第一部分是公共的属性,第二部分是自定义控件MyCustomView的主题样式,该主题样式里的属性必须包含在公共属性中。自定义View一般需要重写onMeasure和onDraw方法Measure过程用于计算视图大小,View类Measure过程相关方法主要有以下三个。布局中使用自定义View

自定义View类控件实现方法

自定义View的步骤如下。

978-7-111-58810-8-Chapter05-1.jpg自定义View的属性。

978-7-111-58810-8-Chapter05-2.jpg在自定义View类的构造方法中获得View属性值。

978-7-111-58810-8-Chapter05-3.jpg在自定义View类重写onMeasure(int,int)方法。

978-7-111-58810-8-Chapter05-4.jpg在自定义View类重写onDraw(Canvas canvas)方法。

978-7-111-58810-8-Chapter05-5.jpg在xml布局文件中布局自定义View类。

(1)自定义View的属性

在res/values下面新建attrs.xml属性文件。

自定义属性分两类:定义公共属性和定义控件的主题样式。

上面的XML文件第一部分是公共的属性,第二部分是自定义控件MyCustomView的主题样式,该主题样式里的属性必须包含在公共属性中。言外之意就是公共属性可以被多个自定义控件主题样式使用。format字段后面的属性单位基本包括如下几个:dimension(字体大小)、string(字符串)、color(颜色)、boolean(布尔类型)、float(浮点型)、integer(整型)、enmu(枚举)、fraction(百分比)等。

(2)自定义View一般需要选择实现的三个构造方法

从代码中不难看出,这三个构造方法是一层调用一层的,具有递进关系,因此,我们只需要在最后一个构造方法中获得View的属性。(www.xing528.com)

(3)自定义View一般需要重写onMeasure(int,int)和onDraw(Canvas canvas)方法

Measure过程用于计算视图大小,View类Measure过程相关方法主要有以下三个。

978-7-111-58810-8-Chapter05-11.jpgpublic final void measure(int widthMeasureSpec,int heightMeasureSpec)

978-7-111-58810-8-Chapter05-12.jpgprotected final void setMeasuredDimension(int measuredWidth,int measuredHeight)

978-7-111-58810-8-Chapter05-13.jpgprotected void onMeasure(int widthMeasureSpec,int heightMeasureSpec)

measure调用onMeasure,onMeasure测量宽度、高度,然后调用setMeasureDimension保存测量结果,measure、setMeasureDimension是final类型,view的子类不需要重写,onMea-sure在View的子类中重写。

onDraw过程主要利用前两步得到的参数,将视图显示在屏幕上,到这里也就完成了整个视图绘制工作。

public void draw(Canvas canvas)

protected void onDraw(Canvas canvas)

通过调用draw函数进行视图绘制,在View类中onDraw函数是个空函数,最终的绘制需求要在自定义的onDraw函数中实现。

(4)布局中使用自定义View

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈