《那天》以及一些想法

接上一篇《<那天>预告》……

预告过后这么久才又发了一篇也是醉了,其实我一直都有做下去,没早点写一是因为很多时候我都在关注一些细节的地方,不太好讲出来,其次就是平时写到比较晚,困了就直接睡觉了,再写篇博客可能又要到1点(貌似今天也逃不过了……)。

这篇博文主要包含下面几点:App定位Coding开源项目对系统级UI的看法。乍一看是不是不像个“阶段性总结”?其实很多想法都是从《那天》这个项目中提炼出来的,或者就是这个项目中的问题和延伸。看官莫急,待我细细道来。

App定位

预告中也说到,开发《那天》的初衷很是简单,因为是我自己的需求。满足自己的需求总是有很强的动力,所以就下决心把这款App做出来。当然我也希望能有其他朋友使用和喜欢这款App。

为什么会谈到定位的问题?对“定位”这个词的看法,首先觉得这个词已经被传成一个“大词”了,蕴含了太多的含义和内容,背后一通方法论,其次“定位”又是每个人、每件事物都会经历的很普遍的事情,或是活动。我习惯将这些概念看得简单化,不一定正确,但是我希望用更少的成本萃取它核心的价值。

“定位”就是找准位置,同时转向到特定的方向。位置决定属性,朝向决定未来。“面朝大海,春暖花开。”首先要到海边,然后面朝大海,最后才能春暖花开。当然,你也可以改变环境,把海搬到面前。

我把《那天》定位为简洁、直观的记日子的app,简洁、直观、记日子就是它的位置(属性),朝向(方向)呢?惭愧地说我也说不清楚,我也不知道谁会喜欢《那天》,甚至我也不知道我希望哪些用户喜欢《那天》。

但是我希望《那天》是这样的一款App,它貌不惊人,没有华丽的外表,毫不张扬,甚至当你使用过几次之后也不会感觉到它对你的意义,但是突然有一天,你发现你有了一个很简单很简单的需求,恰巧,《那天》帮你默默实现了。如果平均对于每个用户,《那天》能帮你完成这样一件小事,让你感到一丝温暖,我觉得《那天》就已经能感受到“春暖花开”了。

至于朝向?那就是风来的方向吧。

Coding

读的代码越多,写的代码越多,越觉得精简的代码的价值,我也在努力做到这一点。忘了曾经是哪位前辈在微博上说他不允许团队成员把显示器竖过来写代码,因为这样会更容易写出冗长的代码。我觉得这么做是很有价值的,我忘记了一个函数的推荐最大行数,但是有一些简单的标准:一个函数,或方法的行数不要超过一屏的高度,嵌套层级不要多于3层,不要让一行代码的长度超过屏幕宽度,尽量不要出现重复语句或表达式

曾经我对这些要求或是标准嗤之以鼻,而且觉得能将几行语句压缩成一行比较长比较复杂的语句是一件很了不起的事情,但是从生产角度来说,这些都是不好的习惯,优雅的代码就像一篇优美的文章,不但结构清晰排版美观,字里行间隐藏着恰到好处的点睛之笔。像是在小径中穿梭,不时又能看见一处景致。

现在我还在朝着这个方向努力着,上面这些标准或要求,其实并不是一成不变的。简单的,比如拼一个sql语句,超过屏幕宽度甚至折行也是很容易的,尤其拼凑的语句中再调用一些名称比较长的方法,长度很容易就上去了。所以放轻松,写优雅的代码。

说到拼sql语句,这里插一句。貌似Java编译器会自动将字符串拼接的 + 操作替换成StringBuffer实现,所以对于性能不必太担心啦。其实用Java一般不用太操心性能,毕竟Java的“定位”也不在性能,对吧?即便在Android中,对业务逻辑的优化以及系统资源的优化,远比这些代码细节有意义的多。

开源项目

如果不出意外的话,《那天》在上线之后也会开源出来

开源与否不是对立的,我认为它们的基本区别是对待知识的态度不同。闭源也不一定不是“开放”的,开源也不一定是“开放”的。前段时间蘑菇街开源了他们的IM项目,在网络上吵的火热。但是如此高调开源,结果却被指出是盗用网易POPO的代码,这件事不仅仅是这一家公司的职业道德问题,而且是对开源精神的玷污,用开源来炒作是种破坏风气的行为,应该谴责。

《那天》中也使用了开源项目,这也是我想把它开源的原因之一。开源项目是分享技术和技术思想的一种高效的方式,我在使用开源项目的时候,不仅仅在调用而已,也在思考作者的实现方式和思路,在必要的时候,也会去更改作者的代码来适应我的需求。我想这也是开源优势的一个体现吧。

此前我也开源过一个小组件,SwitchButton,想了解的同学可以看我的那篇博客,或者直接去Github下载源码,建议选择后者,因为博客上的效果已经更新了。这个小控件我觉得也蛮小而美的。几乎我用到的所有App都会使用这个控件,但是很多应用的这个控件似乎都是应用的败笔,就像草草赶工的结果,甚至感觉那个团队中的产品、设计、交互和开发交流太不充分,还有就是觉得产品已经没用过什么优秀应用……我觉得Android上的应用把这个细节控制得好的,就应该是Instagram了,非常细腻,而且符合App的整体风格。

好了不吐槽了。虽然SwitchButton只是一个小控件,甚至可能会被用户忽略的控件,但是就是这个控件,我觉得是能创造感动的地方,我希望能做到这点。在开发《那天》的时候,也基本完成了MaterialDesign风格的Dialog的项目开发,基本达到了可以分离出来开源的程度了,不过现在还没时间弄,等《那天》开发接近尾声的时候再分离出来吧,其实也不远了。先预告一下吧:

1.pic_hd

 

默认样式是这样的,可以配置高亮颜色,尽量做到可以配置背景颜色(因为有阴影,现在还没找到简单的处理阴影的通用方法),还有重要的是使用方法和内置的AlertDialog完全一致,从AlertDialog迁移到MaterialDialog只需要把AlertDialog更改成MDialog就可以了。刚才这个对话框的调用代码:

1
2
3
4
5
6
7
new MDialog.Builder(this)
.setTitle("输入有误~")
.setMessage("再想想,那天发生了什么难忘的事?")
.setCancelable(false)
.setPositiveButton("再想想", null)
.create()
.show();

是不是很方便?其实才开发《那天》之前发现了Github上的一个同样效果的开源项目,就叫MaterialDialog,也有近300个star,不过在使用的时候发现那个项目的使用不太符合我的习惯,而且我和作者的思路也不尽相同,所以就没有引用这个项目。在Java中,我还是很喜欢上面这种一气呵成的代码风格的。

系统级UI

调UI是个繁琐的过程,我经常会反复尝试不同的尺寸、颜色等样式搭配来达到一个觉得比较好的效果,这个过程是很耗时间的。独立开发,自己要同时作为产品、设计、交互、开发的角色,自己跟自己过不去的情况也是很常见的。《那天》中我尽量做到不同界面,不同控件的风格统一,从可以看到的样式和看不到的样式之间的关系中都能保证视觉和交互的连续性。

通过这段时间的开发,我渐渐认识到一套系统级的UI的制作完成是一件多么困难的事情。又想到了MIUI为了搭建主题生态,又是做了一件多么浩大的工作。MIUI6出现的时候,我吐槽过MIUI6的系统层面只是对界面的一些表白进行了调整,但是想想如果更改系统UI框架导致主题市场的崩溃,也还是能理解的。再想想老罗的锤子ROM,在ROM发布会上,老罗多次演示了解锁进入主界面的浮动动画,我觉得他是真的爱那款产品才会那么做的。作为一套视觉系统的构建者和主导者,老罗在在锤子ROM中倾注的心血一定是相当多的,而且是走心的。锤子ROM漂亮,而且漂亮的那么自然。

额……我不是锤粉,不过也不是锤黑,如果T1的质量和品控好的话,说不定真会买一部。MIUI和锤子ROM之间,如果非要选择一个的话……我能选择Flyme么……

我不粉上面任何一家,选择Flyme的原因,首先Flyme很漂亮,其次Flyme是一个有态度的系统。

借此机会,向所有为了用户体验在用户层倾注心血的公司,向所有美好视觉和交互的创造者表达感谢,同时缅怀永远没有离去的乔布斯……

结尾

几天前拍的一张照片:

1971_web

 

创造是学习的一部分,学习也是创造的一部分。如果不尝试去创造,就没有真正学习;如果只埋头苦干而不学习和思考,那就不是真正的创造,而是“造”。

——自勉