PictureSelector

简介:最近项目中用到多图选择上传的需求,随后百度了一下用了别人写的 demo,发现在很多机型上各种不适,闪退等问题,严复影响使用,后面我自己写了一个,公司 20 几款手机全部通过,在腾讯云测中也使用了 4,50 款手机测试,没有发现问题,特分享出来。
功能特点:
1.适配 android7.0 系统
2.解决部分机型裁剪闪退问题
4.解决图片过大 oom 闪退问题
5.动态获取系统权限,避免闪退
6.支持相片 or 视频的单选和多选
7.支持裁剪比例设置,如常用的 1:1、3:4、3:2、16:9 默认为图片大小
8.支持视频预览
9.支持 gif 图片
10.支持一些常用场景设置:如:是否裁剪、是否预览图片、是否裁剪、是否显示相机等
用得着的人点个赞吧~ 项目会一直维护,发现问题欢迎提出~
更多:作者   提 Bug   示例 APK   
标签:
android多图选择 视频-图片选择,适配-

最近项目中用到多图选择上传的需求,考虑到 android 机型众多问题就自己花时间写了一个,测试了大概 60 款机型,出现过一些问题也都一一修复了,基本上稳定了特分享出来,界面 UI 也是商用级的开发者不用在做太多修改了,界面高度自定义,可以设置符合你项目主色调的风格,集成完成后就可以拿来用。 顺便感谢一下,大家对我的支持~

重要的事情说三遍记得添加权限

< 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" />

功能特点:

1.适配 android7.0 系统

2.解决部分机型裁剪闪退问题

3.解决图片过大 oom 闪退问题

4.动态获取系统权限,避免闪退

5.支持相片 or 视频的单选和多选

6.支持裁剪比例设置,如常用的 1:1、3:4、3:2、16:9 默认为图片大小

7.支持视频预览

8.支持 gif 图片

9.支持一些常用场景设置:如:是否裁剪、是否预览图片、是否显示相机等

10.新增自定义主题设置

11.新增图片勾选样式设置

12.新增图片裁剪宽高设置

13.新增图片压缩处理

14.新增录视频最大时间设置

15.新增视频清晰度设置

16.新增 QQ 选择风格,带数字效果

17.新增自定义 文字颜色 背景色让风格和项目更搭配

18.新增多图裁剪功能

19.新增 LuBan 多图压缩

20.新增单独拍照功能

项目会一直维护,发现问题欢迎提出~ 会第一时间修复哟~ 由于加好友的太多 现在集中到 QQ 群中讨论 619458861,个人联系方式 893855882@qq.com 希望用得着的朋友点个 start,你们的支持才是我继续下去的动力,在此先谢过~

另附我的博客地址:http://blog.csdn.net/luck_mw

app-build 引入 compile 'com.github.LuckSiege.PictureSelector:picture_library:v1.2.7' 注:之前引入如有报错,请引入最新版本、

项目根目录

allprojects {

repositories { 

    jcenter() 

    maven { url 'https://jitpack.io' } 

}  

}

注:适配 android7.0 拍照问题,请在 AndroidManifest.xml 中添加标签

< 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>

**相册参数构造**

FunctionConfig config = new FunctionConfig();

config.setType(selectType); 1 图片 or 2 视频 LocalMediaLoader.TYPE_IMAGE,TYPE_VIDEO

config.setCopyMode(copyMode); 裁剪比例 默认 1:1 3:4 3:2 16:9 可参考 Constants.COPY_MODEL_1_1

config.setCompress(isCompress); 是否压缩

config.setMaxSelectNum(maxSelectNum - images.size()); 最大可选数量

config.setSelectMode(selectMode); 2 单选 or 1 多选 MODE_MULTIPLE MODE_SINGLE

config.setShowCamera(isShow); 是否显示相机

config.setEnablePreview(enablePreview); 是否预览

config.setEnableCrop(enableCrop); 是否裁剪

config.setPreviewVideo(isPreviewVideo); 是否预览视频(播放)

config.setCropW(cropW); 裁剪宽

config.setCropH(cropH); 裁剪高

config.setRecordVideoDefinition(Constants.HIGH); // 视频清晰度 Constants.HIGH 清晰 Constants.ORDINARY 普通 低质量

config.setRecordVideoSecond(60);// 视频秒数

config.setCheckNumMode(isCheckNumMode); 是否显示 QQ 选择风格(带数字效果)

config.setPreviewColor 预览文字颜色

config.setCompleteColor 完成文字颜色

config.setPreviewBottomBgColor 预览界面底部背景色

config.setBottomBgColor 选择图片页面底部背景色

config.options.setSelectMedia() 已选图片集合

config.setCompressFlag(compressFlag); // 1 是系统自带压缩 2 是鲁班压缩

config.setCompressW(compressW); //Luban 压缩宽

config.setCompressH(compressH); //Luban 压缩高

// 先初始化参数配置,在启动相册

PictureConfig.init(config);

// 启动相册并设置回调函数

PictureConfig.getPictureConfig.openPhoto(MainActivity.this, resultCallback);

// 单独启动相机拍照

PictureConfig.getPictureConfig().startOpenCamera(mContext, resultCallback);

// 外部预览图片方法 (例如选完后要预览的可调用此方法)

PictureConfig.getPictureConfig.externalPicturePreview(this, position, selectMedia);

/**

  • 图片回调方法 */

private PictureConfig.OnSelectResultCallback resultCallback = new PictureConfig.OnSelectResultCallback() {

@Override

public void onSelectSuccess(List< LocalMedia> resultList) {  
        if (media.isCompressed()){  
        // 注意:如果压缩过,在上传的时候,取 media.getCompressPath(); // 压缩图 compressPath  
        } else {  
        // 注意:没有压缩过,在上传的时候,取 media.getPath(); // 原图 path  
        } else{

        // 注意:如果 media.getCatPath();不为空的话 就代表裁剪的图片,上传时可取,但是如果又压缩过,则取最终压缩过的 compressPath  

        }

        selectMedia = resultList;  

        if (selectMedia != null) {  

            adapter.setList(selectMedia);  

            adapter.notifyDataSetChanged();  

        }  
    }  

};

image image image image image image image image image image image

Android 开发经验分享
Android 开发经验分享