Android的自学之路

简单介绍下,非计算机专业,14年开始接触编程,陆续学习了些Android知识。然后年底的时候辞职开始专心学习Android开发。那时候其实差不多把《第一行代码》看完了,对Android基础的知识有了一定的了解。

自学过程

由于自己习惯把做过的一些demo放到github上,正好可以借此回顾下自学的过程。

其实android入门的教程是很多的,比如我看的《第一行代码》(强推),官方教程(强推),极客学院的视频课程等资料。
但是,我在学完了之后其实很困惑,四大组件学完了然后呢?我只能根据书上的例子敲demo,做不出什么实际的东西来。
然后想到要自己做出个App来,现在想来这虽然有用,但不是一个高效的方法。
因为做一个App不是一件容易的事,除了代码方面的工作,设计和功能都是要进行构思的,而这两项工作都很费功夫。
所以,我决定从模仿一个App的UI开始。

豆瓣Demo

我首先做的是一个非常粗略地模仿豆瓣UI的demo。
豆瓣demo
github地址
demo详细介绍
这个demo虽然简单,但是用到了几个非常常用的控件,如ViewPager(居家必备), SwipeRefreshLayout(官方下拉刷新), PagerSlidingTabStrip(常用的ViewPager Indicator)。我也是在这个demo中第一次使用到了开源库,体会到了gradle导库的爽感。

简易知乎日报

第一个demo完成了之后,挺开心。但是想想,光滑来滑去也没太多意思。总得来些网络请求之类的吧,但是自己又没有api,正巧这时候发现了纯净知乎日报,既是个开源的App,wiki还有针对知乎Api的分析。于是就先拿来玩耍了下,然后学到了不少东西,如java文件的包设计,一些自定义的drawable的使用,如layer-list, shape等等。
学完了的东西就得用起来,于是我就做了自己的知乎日报。
知乎日报
github地址

这个App在很大程度上参考了纯净知乎日报,比如网络请求同样是用asynctask封装,gson解析,图片加载用的是universal-image-loader等等。
但是又加了自己的一些东西,比如webview+css样式的运用,以及收藏功能的实现。前者是通过google+stackoverflow,后者只是简单的数据库的应用。

仿堆糖UI

现在终于可以做出一个比较简易的App了,虽然是在大量借鉴的情况下,但起码又是一个大的进步。
接下来我又做了一个高仿堆糖UI的App,纯UI,没有网络交互。
堆糖首页
堆糖个人页
github地址
这个阶段UI的仿照就比较细致了,而且随着UI复杂度的提升,可能会出现Touch事件冲突的现象。
比如热门页那里,ViewPager的左右滑动和下拉刷新是有冲突的,我采取的解决方法可以看github里面的介绍。
瀑布流、actionbar透明度的变化,都是通过google+stackoverflow一步步解决的。
这个App是手工通过玩正版App一步步拷下来的,基本是看图写代码。大量的看、写、比、改,布局写法的熟练度迅速上升。
做下来之后,不是太过复杂的界面基本可以Hold住了。

上线App

接下来就跑到一家创业公司做App去了。独立开发的App已在各大市场上架。但是感觉做的一般,就不上图了。
App包含了第三方分享,第三方登录,自动更新,这部分都是友盟的插件来实现的,没什么技术含量。
在这个App里我实现了网络的封装,可以通过发送请求,然后自动解析json,返回java对象。
看起来好像很高大上的样子,其实就是使用了Volley库,实现里自己的request,并在parseNetworkResponse里使用gson对数据进行了处理而已。

经验总结

回顾结束,下面讲讲一些经验总结。

  1. 从简单的东西做起,然后一步步加深
    我刚开始的仿豆瓣其实非常的粗略,但是通过它熟悉了Viewpager,SwipeRefreshLayout,而这两项又在后面的项目中大量运用到。自己做的东西也从以前的只有UI,到加入网络请求,再到封装网络。

  2. 如果没有具体的App的点子,从模仿开始
    比如可以简单的模仿一个App的UI,或者学习一个简单的开源App,然后通过学习自己制作一个类似的,尝试增加一些小功能。

  3. 遇到瓶颈的时候,不要想太多,只管努力就是了
    虽然上面的经历回顾写的好像顺风顺水的样子,其实完全不是,经常几天都没有啥进展。
    在那时候也会对自己有些怀疑,但是不要想太多,努力下去就是了。
    因为编程需要积累,而积累的反馈是具有延迟性的,一点点的量变引起质变。
    比较常见的情况是,可能好几天都没有啥突破,然后过了一段时间后,突然发现自己已经进步了不少。

  4. 多想想有没有更好的实现方法
    比如学会用asynctask来进行网路请求后,可以想想有没有更好的实现方式。这时就可以找下相关的网络库,比如volley, retrofit之类的进行学习。

  5. 学会使用开源库
    Android现在的开源库已经比较强大了,比如图片加载库有picasso,universal-image-loader,glide等等。
    开源库的总结可以看看 andoird open project,整理的比较全面了。
    程度上升了之后可以去看看 android open project analysis,了解下开源库的实现原理。

  6. 把英语练好,学会翻墙
    大部分碰到的问题都可以通过google+stackoverflow解决。