# PhotoPicker **Repository Path**: macyer/PhotoPicker ## Basic Information - **Project Name**: PhotoPicker - **Description**: Android 照片选择器 ,支持单图、多图、视频、gif选择,内置鲁班压缩和Ucrop裁剪功能,以及主题自定义配置等功能 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-05-29 - **Last Updated**: 2023-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PhotoPicker [![](https://jitpack.io/v/yudu233/PhotoPicker.svg)](https://jitpack.io/#yudu233/PhotoPicker) Android 照片选择器 ,支持单图、多图、视频、gif选择,内置鲁班压缩和Ucrop裁剪功能,以及主题自定义配置等功能 简书:[PhotoPicker](http://www.jianshu.com/p/a6b5831797d0) ### 各位读者来点Star支持一下吧 ==如使用请尽快更新到2.0.0版本,本版本新增多个功能,修复旧版本已知问题== dev分支 参考项目: - https://github.com/donglua/PhotoPicker - https://github.com/YancyYe/GalleryPick ## 目录 -- [功能介绍](#功能介绍)
-- [集成方式](#集成方式)
-- [照片选择器配置](#照片选择器配置)
-- [配置说明](#配置说明)
-- [初始化](#初始化)
-- [回调方式](#回调方式)
-- [使用的第三方库](#使用的第三方库)
-- [更新日志](#更新日志)
-- [混淆配置](#混淆配置)
-- [联系方式](#联系方式)
-- [效果预览](#效果预览)
### 功能介绍 - 自定义图片加载方式 - 动态权限加载 - 图片、视频单选、多选 - 图片、视频预览 - 自定义主题颜色 - 集成UCrop裁剪 - 圆形头像裁剪 - 自定义裁剪比例 - 鲁班压缩 ### 集成方式 ```java allprojects { repositories { maven { url 'https://jitpack.io' } jcenter() } } ``` **在APP目录下的build.gradle中添加依赖** ```java implementation 'com.github.yudu233:PhotoPicker:2.0.0' ``` **AndroidManifest.xml 配置** ```java //适配android7.0 ``` ### 照片选择器配置 ```java new PhotoPickConfig .Builder(MainActivity.this) .imageLoader(new GlideImageLoader()) //图片加载方式,支持任意第三方图片加载库 .spanCount(PhotoPickConfig.GRID_SPAN_COUNT) //相册列表每列个数,默认为3 .pickMode(PhotoPickConfig.MODE_PICK_SINGLE) //设置照片选择模式为单选,默认为单选 .maxPickSize(PhotoPickConfig.DEFAULT_CHOOSE_SIZE) //多选时可以选择的图片数量,默认为1张 .setMimeType(MimeType.TYPE_ALL) //显示文件类型,默认全部(全部、图片、视频) .showCamera(true) //是否展示相机icon,默认展示 .clipPhoto(true) //是否开启裁剪照片功能,默认关闭 .clipCircle(false) //是否裁剪方式为圆形,默认为矩形 .showOriginal(true) //是否显示原图按钮,默认显示 .startCompression(true) //是否开启压缩,默认true .selectedMimeType(data) //选择后返回的文件(用于判断下次进入是否可展示其他类型文件) .setCallback(new PhotoSelectCallback()) //回调 .build(); ``` ### 配置说明 > **imageLoader(new GlideImageLoader())**
图片加载方式,可以自定义支持Glide、Piscasso、Fresco > **setMimeType(MimeType.TYPE_ALL)**
显示文件类型,默认全部(全部、图片、视频) > **spanCount(3)**
设置相册列表每列展示个数,默认为3列 > **pickMode(PhotoPickConfig.MODE_PICK_SINGLE)**
设置照片选择模式(单选、多选),默认为单选 > **maxPickSize(9)**
多选时可以选择的图片数量,当pickMode为多选时默认为9张,单选默认为1 > **showCamera(true)**
是否展示相机icon,默认展示,当pickMode为多选时默认不展示 > **clipPhoto(false)**
是否开启裁剪照片功能,默认关闭,需手动开启,开启后多选模式自动变为单选 > **clipCircle(true)**
裁剪方式为是否圆形,默认为矩形,设置圆形适用于设置头像 > **showOriginal(true)**
是否显示原图按钮,默认显示,选中后若开启了图片压缩将不再压缩图片,返回原图 > **startCompression(true)**
是否启动图片压缩功能,默认开启(目前图片裁剪后没有再做压缩处理) > **selectedMimeType(List data)**
传入上一次选中的数据,用于判断下次进入是否可展示其他类型文件。如类似朋友圈,第一次选择了图片,此时数据类型为MimeType.TYPE_ALL,打开时将过滤视频文件。
**==注:如果没有多类型的文件限制,可以不加该api==** > **setCallback(new PhotoSelectCallback())**
回调方式1:setCallback();回调方式2:onActivityResult() ### 初始化 > 在Application中初始化: ``` PhotoPick.init(getApplicationContext(), PhotoPickOptionsConfig.getPhotoPickOptions(context)); ``` >配置 ```java public static PhotoPickOptions getPhotoPickOptions(Context context) { PhotoPickOptions options = new PhotoPickOptions(); //自定义文件存储路径 options.filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "eWorld/"; //自定义文件夹名称 options.imagePath = options.filePath + "cytx/"; //自定义FileProvider地址 options.photoPickAuthority = context.getString(R.string.file_provider_authorities); //自定义主题颜色 同步APP options.photoPickThemeColor = R.color.colorAccent; return options; } ``` ### 回调方式 #### 方式一: ``` new PhotoPickConfig .Builder(MainActivity.this) ... .setCallback(new PhotoSelectCallback() { @Override public void selectResult(ArrayList photos) { }).build(); ``` #### 方式二: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) return; if (requestCode == PhotoPickConfig.PICK_SELECT_REQUEST_CODE) { ArrayList datas = data.getParcelableArrayListExtra(PhotoPickConfig.EXTRA_SELECT_PHOTOS); MediaData mediaData = datas.get(0); if (mediaData.isClip()) { Log.e("裁剪:", mediaData.getClipImagePath()); mContent.setText(builder.append(mediaData.getClipImagePath() + "\n")); return; } if (mediaData.isCamera()) { Log.e("相机:", mediaData.getCameraImagePath()); mContent.setText(builder.append(mediaData.getCameraImagePath() + "\n")); return; } if (mediaData.isCompressed()) { Log.e("压缩后:", mediaData.getCompressionPath()); mContent.setText(builder.append(mediaData.getCompressionPath() + "\n")); return; } Log.e("原始地址::", mediaData.getOriginalPath()); mContent.setText(builder.append(mediaData.getOriginalPath() + "\n")); } } ``` ### 使用的第三方库 [PhotoView](https://github.com/chrisbanes/PhotoView) [slidinguppanel](https://github.com/umano/AndroidSlidingUpPanel) [ucrop](https://github.com/Yalantis/uCrop) ## 更新日志 # 当前版本:v2.0.0 * 新增视频、gif选择功能 * 鲁班压缩优化 * 部分机型视频 * 获取资源方式变更 * 修复选择-取消后返回多条数据 * 修复快速双击问题 * UI更新 # 历史版本 ### v1.6.0 * 新增鲁班压缩 * 新增长截图预览功能 * 新增选择原图功能 * 更改存储路径及方式 * 已知问题修复 * 代码优化 --- #### v1.5.0 --- #### v1.2.0 --- #### v1.1.0 --- ### 混淆配置 ``` -dontwarn com.yalantis.ucrop** -keep class com.yalantis.ucrop** { *; } -keep interface com.yalantis.ucrop** { *; } ``` ### 联系方式 有问题可以添加QQ:19880794 ### 效果预览 ![01.png](https://github.com/yudu233/PhotoPicker/blob/master/picture/01.png) ![02.png](https://github.com/yudu233/PhotoPicker/blob/master/picture/02.png) ![03.png](https://github.com/yudu233/PhotoPicker/blob/master/picture/03.png) ![04.png](https://github.com/yudu233/PhotoPicker/blob/master/picture/04.png) ![send.gif](https://github.com/yudu233/PhotoPicker/blob/master/picture/send.gif) ![circleimage.gif](https://github.com/yudu233/PhotoPicker/blob/master/picture/circleimage.gif) ![lookbigimage.gif](https://github.com/yudu233/PhotoPicker/blob/master/picture/lookbigimage.gif)