关于自定义View,相信多数开发者都已经非常熟悉了,网络上的例子也非常多,各种炫酷吊炸天的自定义View也层出不穷。本文只是一个初级学习教程,对于初学者有参考价值。
下面正式进入主题。
本文采用自定义View的方式实现柱状统计图BarGraphView,实现了柱状统计图的基本功能,因为本身是为了学习自定义View,因此扩展性比较差,只能作为自定义View的参考。
上效果图:
View显示到屏幕上主要经过这三个过程
(1)Measure(测量)
首先View需要测量自身的大小,包括长和宽。 当View类的成员函数measure决定要重新测量当前View的宽度和高度之后,会去调用另外一个成员函数onMeasure来真正执行测量宽度和高度的操作。因此,自定义View大多都需要覆写onMeasure方法来测量View的大小。onMeasure方法如下:
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
其中widthMeasureSpec和height MeasureSpec两个参数为父视图的建议大小。 参数measureSpec的值其实是由两部分内容来组成的,最高2位表示一个测量模式,而低30位表示一个宽度值或者高度值,测量模式有三种,分别是MeasureSpec.EXACTLY、MeasureSpec.UNSPECIFIED和MeasureSpec.AT_MOST,这里就不讲三种模式的区别了。在BarGraphView中将会参考这个两个数值来确定BarGraphView的大小。
(2)Layout(布局)
这个过程只在View容器(ViewGroup及其子类)有用,因为非容器类View在屏幕中的位置操作由父控件来决定,所以不需要覆写onLayout()方法。
(3)Draw(绘制)
最后绘制View的过程,在这个过程里主要通过Paint对象在Canvas上面绘制相应图像,最终把View展现在屏幕上。 对于自定义View来说,通常需要覆写onDraw()方法绘制View。
@Override
public void onDraw(Canvas canvas) {
}
该方法提供了一块画布,我们只需要创建一个画笔在画布上绘图案即可。
好了,了解了上述过程,接下来我们开始实现BarGraphView。
BarGraphView主要代码集中在Draw的过程,通过onDraw方法把统计图绘制到屏幕上来。