您的位置:首页 > 移动开发 > Android开发

关于这一周学习Android自定义View的经验总结

2017-07-12 17:28 519 查看

View的几个核心方法

构造函数

自定义View需要定义三个构造函数,分别如下

public CustomView(Context context){
this(context, null);
}
public CustomView(Context context, AttributeSet attrs){
this(context, attrs, 0);
}
public CustomView(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
}


这三个构造函数都很重要,分别在程序启动之后的不同阶段调用,所以均要重写。从这三个构造函数中可以看出,无论是什么构造函数最后都是调用三个参数的构造函数,所以我们自定义的一些初始化操作一般都写在第三个构造函数中,比如对象的初始化。

onMeasure

这个方法用于测量自定义view的占地面积,如下

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

......

}


这个方法带两个参数,这参数是大小和模式的组合值,前30位是大小,后2位是模式,组合起来转化为十进制就是这个参数了。Android提供了一个MeasureSpec工具类来方便提取,分别通过getSize()和getMode()方法便可以提取,具体可以参考其他关于自定义View的博客。当获取到了想设定的宽和高之后,通过setMeasuredDimension()方法,将宽和高两个参数传入进去,便可以达到设定自定义View宽和高的目的。

坐标系

在将绘画方法onDraw之前,先谈一下android的坐标系的问题,如果没有一个完整的Android坐标系模型,是无法掌握好绘制时的位置的。



Android的平面坐标系是倒着的,这一点一定要清楚。而在这里我还有一个疑问没有解决,就是关于onMeasure方法定义大小之后的坐标系是如何的,根据我自己的几番尝试,发现 控件的左上角永远是坐标原点。于是我恍然大悟,onDraw中绘制是在控件中绘制,自然所参照的坐标系是根据自定义view形成的坐标系。

所以我现在得出的结论是:onMeasure所定义的区域,便是在坐标系(0,0)、(0,height)、(width, height)、(width, 0)这四个点之间的矩形区域,width和height便是onMeasure方法中调用setMeasuredDimension方法传入的宽和高。

懂了上面这一点,我们绘制图形就很清晰了,上边界是y = 0;左边界是x = 0;下边界是y = height;右边界是x = width。

onDraw

这个方法,很明显的可以看出来,用来画画的。

而这个方法带有一个参数,onDraw(Canvas canvas),这个参数代表了用来画画的画布,但我觉得,它更像画画的人。通过调用它的各种绘制方法,传入相应的参数,便可以画出想得到的图形。

下面列举一些常用的绘制方法:drawRect()、drawCircle()、drawPath()、drawText()等等

这里我省略了它们的参数,具体参数可以自行百度,它们分别用于画矩形、画圆、画路径(折线)、画文字。

无论是什么绘制方法都需要用到Paint对象,这是画笔对象,通过设置它的相应属性,可以改变图的颜色、文字大小、实心空心等等,建议去百度Paint常用属性。

未完待续

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息