[OpenSource] Android 图片、视频选择库 PVSelector
来源:互联网 发布:无经验美工如何面试 编辑:程序博客网 时间:2024/05/17 23:51
Android 图片、视频选择库 PVSelector
写在开始
去年在编写公司项目的时候,牵涉到图片选择的部分,UX“借鉴”了微信的相关UI,因为工期原因,没有时间雕琢一个比较精致的选择库,所幸的是刚好在github发现了一个类似的开源项目:PictureSelector,当时这个项目也是才提交未久,匆匆改掉了一些bug,当做module就直接使用了。到今年年初的时候,抽空将之进行了剥离,创建了开源项目PVSelector,故名思义就是:Picture&Video selector。并计划对项目进行优化。
无意冒犯PictureSelector的作者,但当时clone的代码确实可读性太糟糕,在修改bug时造成了很多麻烦。近期抽空对项目进行了优化,从命名、逻辑拆分、精简入手进行了风格和规范调整。并且添加了链式调用的API层,避免了使用Config模式的麻烦。
近期又关注了一下PictureSelector项目,半年来也做了很多更新。但在此也鞭策自己一下。
Feature 概览
图片
- 单图、多图选择模式
- 即时拍照
- 图片裁剪 使用开源项目UCrop
- 图片压缩 可使用:
- 系统bitmap的API进行压缩
- 开源项目LuBan进行压缩
- 图片预览,依赖[PhotoView]版本较旧
视频
- 单个、多个视频选择模式
- 预览
风格配置
QQ风格 or WeChat 风格
文字、配色的配置
集成
当前最新版本:
扩展的UCrop module:2.4.0
PVSelectorlib:1.1.0
编译包托管于JFog-JCenter
使用gradle引入依赖:
如果无法拉取到文件,显式的配置下仓库地址
allprojects { repositories { mavenCentral() jcenter { url "http://jcenter.bintray.com/" } }}
添加依赖,注意需要添加Glide
dependencies { //... compile 'individual.leobert.libs:pvselectorlib:1.1.0' compile 'individual.leobert.libs:ucrop:2.4.0' compile 'com.github.bumptech.glide:glide:3.7.0'}
使用
permission
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
manifest文件添加FileProvider配置 (适配Android 7.0 私有文件夹)
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
配置式使用参考sample
关键在于配置FunctionConfig
。
启动:
PictureConfig.init(config); PictureConfig.getPictureConfig().openPhoto(mContext, resultCallback);
链式调用:
//video PVSelector.getVideoSelector(this) .multiSelect(4) .enableCamera() .enablePreview() .setCompleteTxtColor(ContextCompat.getColor(this, R.color.colorPrimary)) .launch(resultCallback);//picture PVSelector.getPhotoSelector(this) .singleSelect() .enableCamera() .enableCrop(FunctionConfig.CROP_MODE_16_9) .useSystemCompress(true,true) .setSelectedMedia(selectMedia) //已经选择的内容 .launch(resultCallback);
关于UI的配置,API 如下:
public interface ICustomStyle<T> { /** * @param spanCount 单行数量上限 */ T setImageSpanCount(int spanCount); /** * @param mainColor 主色 Context.getColor(resId) */ T setThemeColor(@ColorInt int mainColor); /** * 设置选择图片页面底部背景色 * * @param color */ T setBottomBarBgColor(@ColorInt int color); /** * "预览"文字颜色 * * @param color */ T setPreviewTxtColor(@ColorInt int color); /** * “已完成”文字颜色 * * @param color */ T setCompleteTxtColor(@ColorInt int color); /** * 设置完成选取的文字 * @param completeText */ T setCompleteText(CharSequence completeText); /** * 启用计数checkbox */ T enableDisplayCandidateNo(); T setCheckedBoxDrawable(@DrawableRes int drawableResId);}
预览已经选择的图片,库中提供了简单实现:
PictureConfig.getPictureConfig() .externalPicturePreview(mContext, position, selectMedia);
写在最后
截至1.1.0版本,代码中依旧存在着太多值得修改的内容,接下来还是先将这些代码进行修改(我是一个有代码洁癖[pi发第三声]的人),并对部分依赖库进行升级。然后再添加Friendly Functions以及扩展功能,如果支持Audio就要改名PVASelector啦。
项目遵守MIT,托管于github,再次给出传送门:click me,希望喜欢的朋友点个star支持下。
- [OpenSource] Android 图片、视频选择库 PVSelector
- Android 选择图片或视频 ,循环播放
- android 图片选择,可选择图片,视频,音频,文件,方便扩展
- Android opensource
- android opensource
- Android中Gallery图片与视频选择冲突的原因
- android如何浏览并选择图片、音频 、视频
- android如何浏览并选择图片 音频 视频 转
- android如何浏览并选择图片 音频 视频
- android如何浏览并选择图片、音频 、视频
- android多图选择 图片/视频 单选or多选,以及视频录制
- android opensource webs
- android opensource webs
- Android OpenSource Project Instruction
- Android 图片选择 图册中图片选择
- android图片选择图片压缩
- Android 选择图片、上传图片
- android 选择本地图片
- 【PAT】【Advanced Level】1066. Root of AVL Tree (25)
- Qt之XML(SAX)
- Ubuntu搭建webpack环境
- gpio_direction_output vs gpio_set_value之间的使用关系
- c++学习----const常量折叠
- [OpenSource] Android 图片、视频选择库 PVSelector
- python实现找出来一个字符串中最长不重复子串
- MySQL SQL 数据排名查询某条数据是总数据的第几条
- Yii
- Oracle DB管理内存详细介绍
- A: 统计数字
- JDBC获取连接的三种工具类封装方式(v1.0)
- HIVE的动态分区插入
- tensorflow 中的embedding 报错问题解决