最近公司组织培训,跟着外请老师学习了 RxAndroid + Retrofit + Databinding + MVVM
的 Android
开发技术。在培训之前,自己通过网络对这些技术有过了解,感觉很好玩的样子。经过培训后进一步发现,使用这些技术的结合,写起代码来果然很爽。
老师在实战部分,带领我们制作一个仿《推酷》app
的项目。在项目中,使用了上述的技术,并涉及到代码的封装。 项目果然是学习技术的最佳场所,自己感觉收获颇多。但怕时间长了会有些遗忘,因此,使用文章将项目构建的过程一一记录下来。
准备
既然是仿,那就相当于原型设计、界面等材料都有了,不过自己还是得分析一下,好在实际编码之前相好项目的框架结构。
推酷首页是分类新闻列表的展示页面,顶部的工具栏是 Android
官方典型的 Toolbar
的结构,中间内容使用 ViewPager
显示。
在屏幕左侧向右拖动、或点击 Toolbar
左边的菜单按钮,会弹出侧滑菜单。根据侧滑菜单的样子看,应该使用了 Android
官方 meterial design
库中的 NavigationView
控件。
反编译
虽然有了界面显示,但是还缺少切图。当然,没有美工会为你做这个事情。本来就是学习,那就 DIY
到底,反编译[1]下吧。反编译后发现,源码竟然没有混淆,简直是极好的啦。从源码的目录结构中发现了以下东东:
- 官方包——
support
库使用了design
、V4
、V7
包; - 图片——图片预览
chrisbanes/PhotoView
,图片加载显示nostra13/Android-Universal-Image-Loader
,图片加载组件fresco
- 动画——支持在低版本(API 11 以下)使用 Android 属性动画以及 3D 旋转动画的框架
JakeWharton/NineOldAndroids
,徽章图片库nekocode/Badge
-
HTTP
——apache
-
html
解析——jsoup
-
ImageView
——圆形ImageView
库vinc3m1/RoundedImageView
-
ListView
——拖动排序库bauerca/drag-sort-listview
,列表滑动时每一节的头部一直停在列表顶部直到有同样类型的节头部到达列表顶部的库vinc3m1/RoundedImageView
,左滑右滑库baoyongzhang/SwipeMenuListView
-
ExpandListView
——MarkMjw/TreeView
-
GridView
——为GridView
控件添加头部 - 底部导航——模拟
design
库的Bottom Navigation
样式的库Ashok-Varma/BottomNavigation
- 对话框——
meterial
风格的对话框库afollestad/material-dialogs
- 进度显示——
Meterial
风格的ProgressBar
库DreaminginCodeZH/MaterialProgressBar
,光滑不确定进度的库castorflex/SmoothProgressBar
,变形球加载控件dodola/MetaballLoading
,横向水平线进度条daimajia/NumberProgressBar
- 提示信息——
keyboardsurfer/Crouton
- 菜单——动态圆形浮动按钮库
CircularFloatingActionMenu
,可以反作用于滚动事件的类库makovkastar/FloatingActionButton
-
ViewPager
指示器——ogaclejapan/SmartTabLayout
- 搜索——用
meterial design
风格实现的搜索功能库MiguelCatalan/MaterialSearchView
- 滚动——用于观察滚动事件和滚动
view
的库ksoichiro/Android-ObservableScrollView
- 拍照——
commonsguy/cwac-cam2
- 效果——波纹效果
baoyongzhang/SwipeMenuListView
,seekbar progressbar button
的波纹效果aNNiMON/PaperStyleWidgets
- 用户引导——
amlcurran/ShowcaseView
- 统计分析——友盟
- 社会化——
Mob
- 第三方应用相关——微信,魅族认证,新浪微博,
- 适配——魅族
flyme
的反射类
太让人吃惊了,各种类库,各种类库!!! 除了官方的几个库,其它的库几乎都来源于 GitHub
。可真是:用好 GitHub
,走遍天下都不怕!一个 8M 的 app
就使用了这么多的库,想一想我近 20M 的 app
,再想想使用的库,真的惭愧呀!
通过反编译,也可以获取图片、字符串、动画等资源。好多目录,看来推酷为了做适配,也是蛮拼的。
创建项目
这步没啥好说的,按步就班的来就可以了。唯一要注意的是:支持的最小 SDK
版本选择 API 16
,这是因为 GitHub
上有些库对此有要求。
下期预告
今天大概看了一下原版 App
的界面,对它的结构进行了简单的分析,再就是准备开发用到的资源和创建项目了。现在万事具备,只欠东风。这里的东风指的当然是时间。明天如果有时间,就先把项目的框架,即首页的侧滑菜单、顶部 Toolbar
、和内容区域的 ViewPager
搞定吧。
-
注:mac 下的反编译教程可以参考 //www.greatytc.com/p/b3bb4da64dc7 这篇博文。讲得灰常好,相关的工具下载也都能找到。 ↩