Android:支持多选的本地相册
2016-02-12 19:06
399 查看
前段时间在做一个动态发布功能,需要用到图片上传。一开始直接调用的系统相册和相机,由于系统相机不支持多选,就花点时间做了个本地相册,在此开源下。
先上截图,依次为选择相册界面、相册详情界面、查看图片大图界面
相册列表按图片数量降序排序,相册详情列表按图片时间降序排序,对比了下微信和QQ的相册,读取的文件基本一致。
接下来说下相册文件遍历的思路。首先肯定不会是通过文件夹逐级遍历的,这样效率太低。查了下API发现Android的系统数据库已经存储了所有的图片路径和缩略图路径(如果有),可直接通过ContentProvider来获取,获取大图的URI是
获取缩略图的URI是
我的做法是先遍历所有大图,获取ID和路径,再通过大图的ID去查找缩略图路径,在相册中显示的都是缩略图,这样可以提高显示速度,同时减少内存开销。但是通过大图ID去查找缩略图这一步是需要消耗一点时间的,因此将它在App启动时,开启线程执行。LocalImageHelper类用以执行该操作。
待完善点:相册的初始化是放在应用启动时,初始化一次后就不再重新执行,因此假如在应用开启后,设备内添加了新的图片或删除了图片,应用内缓存的相册仍然不会改变,下一步可以在每次打开相册时和本地图片做一次对比,对新增的和删除的图片做一个更新。
Demo中使用了ImageLoader库来展示图片,使用的是Android Studio开发。
GitHub地址:https://github.com/LinJZong/LocalAlbum.git
先上截图,依次为选择相册界面、相册详情界面、查看图片大图界面
相册列表按图片数量降序排序,相册详情列表按图片时间降序排序,对比了下微信和QQ的相册,读取的文件基本一致。
接下来说下相册文件遍历的思路。首先肯定不会是通过文件夹逐级遍历的,这样效率太低。查了下API发现Android的系统数据库已经存储了所有的图片路径和缩略图路径(如果有),可直接通过ContentProvider来获取,获取大图的URI是
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
获取缩略图的URI是
MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI
我的做法是先遍历所有大图,获取ID和路径,再通过大图的ID去查找缩略图路径,在相册中显示的都是缩略图,这样可以提高显示速度,同时减少内存开销。但是通过大图ID去查找缩略图这一步是需要消耗一点时间的,因此将它在App启动时,开启线程执行。LocalImageHelper类用以执行该操作。
待完善点:相册的初始化是放在应用启动时,初始化一次后就不再重新执行,因此假如在应用开启后,设备内添加了新的图片或删除了图片,应用内缓存的相册仍然不会改变,下一步可以在每次打开相册时和本地图片做一次对比,对新增的和删除的图片做一个更新。
Demo中使用了ImageLoader库来展示图片,使用的是Android Studio开发。
GitHub地址:https://github.com/LinJZong/LocalAlbum.git
相关文章推荐
- 支付宝咻一咻怎么用 Android帮你实现咻一咻
- Android中常出现的内存泄漏情况分析
- Android 的Drawable
- Android 实现点击两次BACK键退出应用
- Android中常见IPC方法总结
- 一、Android编码规范
- Android 开发笔记——通过 Intent 传递类对象
- android、Java下判断两个String是否相等 、EditText输入是否为空,
- Android ImageButton的使用。
- Android:30分钟弄明白Touch事件分发机制
- Unable to create Debug Bridge:Unable to start adb server
- ANDROID_MARS学习笔记_S02_004_ExpandableListActivity
- Android Wear开启通过蓝牙调试后,显示"主机:已断开连接"解决方法
- Android TV Studuy1-2
- android:从另外一个activity中返回数据
- Android使用简单的Service
- Android 编程下 Touch 事件的分发和消费机制
- Android Layout 之 RelativeLayout
- Android电话拨号器的实现
- ANDROID_MARS学习笔记_S02_003_AutoCompleteTextView