很多读者给我留言,让我讲下关于自定义View的分析,我想说,自定义View,看完这篇文章,就够了!
没错,是在吹牛逼,自定义View根本写不完,任何企图靠几篇文章就完全驾驭自定义View的,都是耍流氓,是要被打的。
学习自定义View绝对是一个没有止境的过程,你永远不知道射鸡师会拿着什么样的图来找你。在自定义View的江湖,有传说级别的爱哥,但已经退出江湖多年,好久没传出一篇自定义View的秘籍了,也有现在风生水起的养猪大侠CJJ,以他为首的一帮丧心病狂的自定义View开发者,曾经写过很多自定义View的文章和库,多看看他们的文章,可以吸取天地的精华,让你在学习自定义View的时候,至少比别人快一个车位。
好了,下面进入正题,自定义View到底怎么学。学习自定义View之路好比是在渡劫,越到后面,越是难以超越自我,但是入门,还是非常简单的。
资质
自定义View大部分时间都是在搞数学,特别是三角函数、角度、弧度等等知识,如果你数学高中都没毕业,请先完成你的学业!
第零劫
了解Android的View视图坐标系,知道什么是绝对坐标,什么是相对坐标,以及你现在在哪个坐标。这是开始学习自定义View的基础,不掌握好坐标,你后面连该往哪画都不知道,还自定义个啥?这一块在《Android群英传》中有详细的讲解,推广一下,别喷我。
第一劫
了解Canvas绘图的基本API,例如drawXXX之类的方法,这些是你的第一支画笔,如果你都不熟悉自己的画笔,那么还谈什么绘图?这一劫的基础一定要打好,多去尝试尝试这些API,修改修改参数,看看效果会发生怎样的变化,这一阶段的基础不打好,会让你后面如履薄冰。
第二劫
了解View的重要重载方法例如onSizeChanged()之类,以及getTop()、getXXX()这样的方法,到底取出的是什么样的数据,这些方法究竟在什么时候被调用。这一块在《Android群英传》中也有详细的讲解,推广一下,别喷我,again。
第三劫
了解View绘图的过程,底层的绘图原理,特别是onLayout()、onMeasure()这些方法到底是个什么鬼,以及你的View大小究竟是怎么计算出来的。这个阶段对于完成一个可商用的自定义View是至关重要的,你的绘图要想具有装逼的功能,就得满足不同人的需求,不仅要好看,而且要好用。
第四劫
了解Canvas的状态保存,坐标移动等内容,了解图层以及图层的保存,了解通过改变坐标来简化绘图的方法。这些东西就和真实的绘图很像了,特别是图层之类的概念,可以说是PS的核心了。
第五劫
了解Bitmap、Drawable等内容,知道如何对自定义View进行很好的拓展。利用好这些东西,可以对自定义View进行很好的补充。
第六劫
了解Path的API,了解通过Path来构造图像的方法,特别是贝塞尔曲线、以及PathMeasure的使用。这些都是数学绘图的高级使用技巧,掌握这些技巧,是后面进行自定义动画的基础,更是自定义View的高级技巧。
第七劫
了解图像的混合模式、Path的填充模式、环绕模式、Matrix等对图像特效的处理方式。这些是对图形图像的进一步处理,前面可能都是针对单独的效果,而利用混合模式、矩阵,可以实现更加丰富的效果。
http://www.imooc.com/learn/343 Android图像处理-变"换"莫测的图像
http://www.imooc.com/learn/302 Android图像处理-打造美图秀秀从它开始
这两门课是我在慕课网讲的对图像处理的两门视频课程。对于自定义View的特效实现,还是很有帮助的,欢迎大家前去围观。
在渡过这七劫之后,你就可以向着自定义动画进军了,这部分,我们下道菜才聊,先缓一缓,大家可以针对前面的劫数,来看看自己目前处于哪一劫。
其实自定义View并不是什么非常高深的东西,要学好自定义View,首先要对你的绘画工具了如指掌,看到要自定义的View,首先要在气势上压倒她,没有什么自定义View是做不出来的,仔细分析,如何用你手中的画笔、工具,来绘制,复杂的图形,是否可以拆解,是否可以通过一些技巧来简化。分析完毕,就是纯粹的坐标计算了,利用好View的API和重载方法,做最合适的计算。剩下的就是留给你装逼的时间了。另外,多看一些优秀的自定义View是如何实现的,以及一些解析自定义View的博客,对提高自己的绘图技术,也是很有帮助的。