关于这一周学习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常用属性。
未完待续
相关文章推荐
- Android总结笔记01:自定义View学习(一)
- Android动画学习Demo(1) 关于ViewAnimation的用法及总结
- 2014-11-3Android学习------关于自定义视图View的时候需要调用onMeasure--------GIF动画实现
- android 自定义View学习总结-继承自ViewGroup
- Android学习总结 :自定义 View(一)
- 关于Android 中View的分发机制的学习与总结(ViewGroup篇)
- Android进阶——自定义View的必修课之关于Canvas绘图与Android坐标系的总结
- Android动画学习Demo(1) 关于ViewAnimation的用法及总结
- Android学习:自定义ViewGroup方法总结
- 关于Eclipse新建Android环境下的百度地图工程学习经验总结
- android 自定义View学习总结-继承自ViewGroup(2)
- Android进阶学习总结-自定义ViewGroup和属性
- 关于Android中View的分发机制的学习总结(View篇)
- Android学习:自定义ViewGroup方法总结
- 关于Android软件破解的经验总结
- 关于嵌入式系统学习的一点经验总结
- Android ViewGroup学习总结-初步(Demo)
- Apidemo学习 android 自定义View
- 关于Android实现语言切换的经验总结
- Android学习备忘020——android自定义ImageView实现缩放,回弹效果