打造一个瀑布流图片浏览App

一、前言

最近相继发布了几个开源项目,造完轮子,很自然的想到要弄个App来跑一下。
于是捣弄了一个浏览图片的APP。

二、技术引用

LightKV
高性能key-value存储组件,相比SharedPreferences有全方位的改进。
支持Kotlin属性委托,在Kotlin环境下使用,可以像读写变量一样读写配置。

LightEvent
超轻量的事件总线,不到50行代码。
简单到极致,使用也很方便。

Task
实用的线程调度框架,针对App开发的使用场景做了适用性封装。
支持优先级,适配生命周期,支持任务分组,任务去重;
可直接执行任务,可用于RxJava, 可替换AsyncTask。

Doodle
高效的图片加载框架。
功能完备,实现清晰。

此外,还用到了其他的一些开源工具,例如:PhotoView

页面布局:
频道: ViewPager + Fragment
图片列表: RecyclerView + StaggeredGridLayoutManager(瀑布流)。
是比较常规的布局了,不过其中要解决频道编辑,图片跳动等一些小问题。

图片来源:
图片的来源主要是爬取一些优质的图片采集网站。
没有用到什么爬虫框架和解析框架(比如JSoup), 直接找特征然后用正则提取。

三、效果

这些是从花瓣网下载的图片,花瓣网的素材还是不错的,而且更新得很快。
项目中预置了几个频道,图片展示则是瀑布流+分页加载。

遇到喜欢的图片想下载回来怎么办?
虽然功能简单,但是“刚需”还是要提供的:
可以设置存储路径,然后点击图片详情页右上角的“下载”即可。
侧滑栏可以点击“已下载”查看下载好的图片,或者设置路径到SDCard的Picture目录,用系统的图片浏览器打开-_-
有的图片是长图,详情页是用PhotoView显示的图片(提供友好的缩放交互), 其继承于ImageView, 然后对于宽或者高大约4096的图片,显示不出来。
所以遇到这样的图片,可以下载回来,用系统的图片浏览器打开……
主要是笔者一时没找到可以像PhotoView这样支持缩放,而又支持长图的控件。有用过这样的控件的读者可以推荐一下。

除了花瓣网之外,还支持老外的一个图片网站:unsplash
这个网站都是高清相机拍的图片,源文件分辨率超高,还好网站提供了指定分辨率下载的API,所以图片预览无压力。
遗憾的是这个网站没有按频道划分,只有关键字索引,不过也可以自定义关键字来作为频道分组了。

四、下载

项目已发布到github, 项目地址:https://github.com/No89757/Collector

推荐阅读更多精彩内容