##首先
今天1010卖萌节,得卖个萌啊啊啊啊是吧,此时不卖萌何时卖……(:3」∠)
这几天为了去混个Android 应用开发中国大学生挑战赛的参与奖,更是因为朋友在十一假期每天都催债一样的要我去写这个,所以国庆假期最后的这几天也算是努力写了个简单的App出来。
##想法
一开始我就先把写游戏给排除了,主要是游戏比较吃美工,就算我对游戏引擎很熟悉,可以很快写完代码,但美工上也要花费无数的时间,这不是我两三天就能搞定的事。 恰好前几天看到Ovo,设计上我觉得挺赞的,而且显得比较简单,所以我就决定山寨这个App再微创新加点自己的功能。
这就是我最初完成DeadTimer的想法,一个转盘式的简约的时间设置,再加上录音来作为提醒铃声。 一个我心中感觉实现起来“性价比”很高的想法就这样诞生了,简单、不丑。 而且我对这个CountDown Timer的理想使用情况是,当我想先上床休息半个小时再去学习的时候,可以直接打开App设置好时间,然后录音“我要学习去了,别赖床!”。 这样的方式比较有趣,而且自己的提醒也会比较有效。 这种情景,在我平常的生活中那是相当的常见(更常见的是我赖床),所以我也想当然的认为这个想法还行。
这个想法简单实现完以后,朋友不满意,觉得太简单了,所以我不得不继续想其它的。 其实吧,这点我一直跟朋友意见相左,我想做的就是一个功能极其简单,但很精致很好用的App,不需要那些乱七八糟多余的东西。
其实我之前就有两个对于闹钟的想法,只是要么夭折了,要么干脆没实现。 第一个是之前在一次活动上做了一半的一个闹钟,主要的特点是有多种唤醒方式可供选择。 然后唤醒方式可以非常有趣,我们已经想到的几个有,要点中一个随机运动的小球来关闭闹钟,要吼多长时间或者达到多少分贝来关闭闹钟,背单词的方式。 总之可以有很多变态的想法,这些都可以之后很方便的拓展,甚至通过内置商城的方式来实现盈利。
第二个关于闹钟的想法我后来觉得有点幼稚。 主要的想法同我之前说的DeadTimer的类似,也是通过设置录音作为唤醒的铃声。 不同的是,我想要把这点做成社交属性。 大家可以上传自己的录音,然后别人可以下载来作为自己的唤醒铃声。 有排行榜,能方便大家找到有意思的录音,好友之间可以传送自己的录音。 我设想的情景是,异地恋的情侣之间,可以在睡觉之前为对方设好自己的录音作为铃声,这样早上起来听到对方声音会感觉很甜蜜,唤醒效果也会不错。 这一点不得不at一下@Will,如果你能看到这里的话,可以跟我说下你觉得实际中是否会有这种效果呢……
其实这些想法,都是因为我想要有个更有效的方式把自己唤醒。 平时赖床太多了,自己也知道,所以一般早上甚至会设十个闹钟,但还是没作用啊。 我现在甚至能在无意识的情况下,养成非条件反射直接抓到手机关闭闹钟了。 然后我就觉得,单调的铃声不能把我弄醒的话,那就来点其它刺激的吧……
##开发过程
其实从Github上,基本上能看到我整个的开发过程。 真正开始写这个项目,应该是从7号开始,到8号中午结束。 其中7号晚上完成了DeadTImer,然后通宵完成了DeadAlarm。 到8号白天,其实精神还很好,要写的也还有很多,但就是不想写了。 这点不得不吐槽一下自己,真是没有长时间连续工作的觉悟啊。
写DeadTimer其实主要需要实现的就是跟随手指画弧线的那个功能。 我也没想到其它的方法实现,反正我是直接拿Canvas放在SurfaceView里直接开画了。 其实要做的也很简单,只要算一下Touch Move的终点和起点之间的角度,其它的也都很好办。 其中最大的问题,其实是Canvas的效率问题。 总之每次不要把整个Canvas都拿出来画,尽量只选择需要画的那一块出来就好,不然可能会不流畅。 同时,我新开了一个线程,把所有Canvas相关的操作都放在这个线程里,这样尽量不影响我的其它部分。
然后就是倒计时的实现,我之前找了半天,以为直接用chronometer这个控件可以实现倒计时的功能。 后来发现是我太天真了。 我不得不重载了TextView来自己写个倒计时,开始自己用handler什么的去实现每秒的延时。 后来发现有个类能够直接实现倒计时,我只需要同步一下TextView就好了。
DeadTimer最后一个功能就是录音,然后回放。 这点非常简单,直接用MediaRecorder和MediaPlayer就行了。 但细节上很多地方都没处理得好。 包括界面上,我还有很多地方想要改进的,最后也都没时间弄了。
最后一个通宵开始写闹钟,为了重复利用,直接就把DeadTimer的那个时间设置拖过来用了。 要加的就是闹钟的管理,还有各种唤醒的小游戏。 闹钟的管理其实挺烦的,要有一个ListView的Activity,要能添加、修改、删除闹钟。 最后还要把闹钟保存好,这点最后没空实现了。 中间倒是跑去学习了一下ActionBar之类的东西,然后因为这个,我就果断抛弃对4.0以下的支持了。 唤醒游戏的话,也就写了一个抓小球的,还在小球自然的随机移动上浪费了点时间。 最后这个DeadAlarm做得那是非常的让我不满意。
但其实这些都无所谓了。 因为很搞笑的是,我们最后居然没有在规定的时间内提交参赛作品。 这点我倒是无所谓,我也算是增加了点写Android的经验吧。 队友倒是比较看重这个,使劲催我,估计他比较蛋疼,而且我觉得最后超时主要还得怪他,所以估计队友更郁闷了。
##感想
这次开发历时很短,开发的东西也很简单。 但也就是因为如此,每当做完一个非常简单的功能,都会觉得还可以优化、美化更多。 每一个地方我都能找到很多不够好的细节。 我就算是山寨Ovo,都山寨得没原来的那个体验好。 细节真的是无处不在,而且再怎么优化都不为过。 这次时间很短,我没法在细节上多做功夫,所以就有了这种感觉,我很多细节都做得不够好。
还有一点感受就是,现在想写一个App真的是再简单不过了。 我之前也基本上没怎么写过Android应用,这次两三天也能完成。 所以在技术上来说,真的都不是什么问题。 我感觉就现在来说,要出个好的App,产品需求分析、定位还有设计这些更加关键。