自定义View怎么学

很多读者给我留言,让我讲下关于自定义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的博客,对提高自己的绘图技术,也是很有帮助的。

原文发布于微信公众号 - Android群英传(android_heroes)

原文发表时间:2016-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coco的专栏

不可思议的混合模式 background-blend-mode

1815
来自专栏大数据钻研

HTML5游戏前端开发【秘籍】

QQ空间Android版4.2和4.5上线的玩吧游戏“空间疯狂套牛”是一款使用HTML5开发出的手机游戏,虽然还有很多不足,但其中使用的一些技术与技巧还是很有...

4557
来自专栏前端知识分享

第1天:CSS基本样式

记住:浏览器有默认margin和padding。样式最开始记得一定写:*{margin:0;padding:0}。

1071
来自专栏微信终端开发团队的专栏

微信“ 15。。。。。。。。。”来龙去脉

微信 Android 大量用户反馈接收或发送类似“15。。。。”信息会导致微信聊天界面卡死,程序崩溃。我们得知这个问题后,第一时间对这个问题进行了紧急修复并在两...

1.4K3
来自专栏Android机动车

自定义View之客服好评View

这个版本主要的任务就是完成环信客服系统的集成,上一篇文章 仿IOS下载View 也是这个版本开发需求中的一小部分,那今天介绍一下另一个小需求 客服好评。 客服好...

1295
来自专栏腾讯社交用户体验设计

H5动效的常见制作手法 - 腾讯ISUX

5512
来自专栏Rindew的iOS技术分享

细数这几年我碰到过的iOS车轮

2295
来自专栏Coding迪斯尼

VUE+WebPack游戏设计:欲望都市,构建类RPG游戏的开发

1234
来自专栏前端新视界

视差滚动技术的简介及运用

维基百科地址:https://en.wikipedia.org/wiki/Parallax_scrolling 视察滚动是计算机图形学以及网页设计中的技术。原理...

2516
来自专栏Coco的专栏

【CSS进阶】box-shadow 与 filter:drop-shadow 详解及奇技淫巧

3035

扫码关注云+社区

领取腾讯云代金券