自定义控件——弄个甜甜圈吧(1): 起源

【注:】本文首发于简书,掘金会同步发送,其余网站皆无授权。

欢迎浏览掘金主页和简书主页,我只是一枚普通的工程师-V-

喜欢自定义控件,也喜欢分享我的思路,希望能得到你的批评和建议,也希望能帮到你

github:https://github.com/razerdp/AnimatedPieView

作为一枚有追求的程序员,既然没法拿刀去捅产品,那只好做的比产品的设计图更加好吧——来自“我”.


写在前面:本篇为起源,暂无涉及代码,仅涉及想法和一些进度,后续会慢慢更新

前言

YaHo~ 好久不见,也好久没在简书写文章了,我是一起撸个朋友圈的作者,虽然好久好久没在朋友圈文集里写文章了(原因在文集里有《再谈朋友圈项目》),但是朋友圈项目我可是一直都有维护的哦~从来都木有落下

如果感兴趣,您可以看看朋友圈项目:https://github.com/razerdp/FriendCircle

嗯,介绍扯完,接下来就进入正题吧

起源

作为程序员,一个新的需求/控件的起源,很多时候都是来源于产品,所以,这次控件的诞生,其实很简单,来源于一张优化点设计图(只截取部分,其余部分不宜公开)

设计图

看起来这张图so easy啦~对吧

3只paint,3个颜色,随便画画,搞定~

可是,不知道为啥,看着这个甜甜圈还挺漂亮的,不甘心就这么简单的画出来就完事。。。

于是心里有个魅惑的声音告诉我:“既然这个不急,只是优化点,那为何不优化彻底一点,做的比这货更漂亮呢”

被魅惑的我,立马熟悉的打开AS,新建Project,填上Name,弄个类继承View,然后。。。。

然后。。。他喵的然后怎么干啊!!!!


迷茫

相信很多人写自定义控件都会有这个疑惑。。。我建好类了~ 我继承好了View了~ 接下来,,,我不会做了TAT

其实不仅仅你们,就是我写过不少的控件,现在建好一个类,我也偶尔会有这个情况。。。(嗯,可能写的还是不够多)

原因很简单:所有的元素,都是心里所想,并没有做出一个具体的动画效果和预览,所以方向太多,一下子很迷茫

因为当我们想完成一个控件或者动画效果是,我们往往很快就能在心里确定好我们想要什么效果,然而当我们真的要实施的时候,就会发现似乎不知道该怎么把效果变成一行行的代码

在迷茫的时候,我的做法是,把我的期望写下来

在心里,我的期望是这样的:

  • 我的甜甜圈会动
  • 我的甜甜圈可配置参数要多
  • 我的甜甜圈点击的时候要有个效果,至于效果,大概是浮上来呈现出Z轴上移的样子,最好能加上阴影
  • 我的甜甜圈要简单好上手。。。

期望写下来,其实就是给自己确定一个TODO-LIST,也给自己一个方向,至少在不懂怎么做的时候,把一个小点做出来再说,毕竟第一版的代码,都是很ugly的。。。

在我把上面的每个小点做出来后,目前我的甜甜圈进度是这样的:

展开动画
点击动画
文字描述

选定方案

迷茫之后,就要真正开始动手,而动手开工的前提,是需要确定好自己的工具

比如按照我上面所写的期望,我会这样去逐步确定我的方案(部分)

  • 甜甜圈:

    • 继承View,自己画出来
  • 我的甜甜圈会动

    • 使用animation,通过数值变换来使甜甜圈慢慢生长
  • 我的甜甜圈可配置参数要多

    • 使用一个类用作参数配置,甜甜圈根据这个类来进行渲染
  • 我的甜甜圈点击的时候要有个效果,至于效果,大概是浮上来呈现出Z轴上移的样子,最好能加上阴影

    • 通过大小变化+paint的BlurMaskFilter使边缘发光模拟出一个视觉欺骗,看起来像选中浮起一样
  • 我的甜甜圈要简单好上手

    • 暴露的api尽量的少,内部代码封装尽量内聚,多使用接口抽象
  • 其他期望。。。做着做着就会产生的了


开工

当你真的要开始写了,我给出我的建议,不管你的代码好还是不好,不管你对自己能否实现有没有一个信心,我都建议,你要把你的代码尽可能的给别人看,比如github,比如技术交流论坛,比如写技术文章

总之就是要分享给别人看,通过大家的批评,或者赞赏,不断的激励着你,不断的在无形中督促着你,你会不自觉的去想方设法提升代码质量,提升封装质量,提升你的技术水平

所以,在建好项目之前,我们,就先Push到github吧~

github:https://github.com/razerdp/AnimatedPieView

下一篇:自定义控件——弄个甜甜圈吧(2): 搭建

推荐阅读更多精彩内容