android多图选择器 图片/视频 单选or多选,以及视频录制。

github代码地址

功能特点:

  1.适配android6.0+系统

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

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

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

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

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

  7.支持视频预览

  8.支持gif图片

  9.支持.webp格式图片

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

  11.新增自定义主题设置

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

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

  14.新增图片压缩处理

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

  16.新增视频清晰度设置

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

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

  19.新增多图裁剪功能

  20.新增LuBan多图压缩

  21.新增单独拍照功能

  22.新增压缩大小设置

  23.新增Luban压缩档次设置

那些遇到拍照闪退问题的同学,请记得看清下面适配6.0的配置~

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

  

  

  

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

   android:name="android.support.v4.content.FileProvider"

   android:authorities="${applicationId}.provider"

   android:exported="false"

   android:grantUriPermissions="true">


         android:name="android.support.FILE_PROVIDER_PATHS"

         android:resource="@xml/file_paths" />

集成步骤

方式一 compile引入

dependencies {

    compile 'com.github.LuckSiege.PictureSelector:picture_library:v1.4.1'

}

方式二 maven引入

step 1.

       

       jitpack.io

https://jitpack.io



step 2.

      com.github.LuckSiege.PictureSelector

      picture_library

      v1.4.1

项目根目录  

allprojects {

   repositories {

      jcenter()

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

   }

}

常见错误*

 问题一:

 rxjava冲突:在app build.gradle下添加

 packagingOptions {

   exclude 'META-INF/rxjava.properties'

 }  


 问题二:

 java.lang.NullPointerException: 

 Attempt to invoke virtual method 'android.content.res.XmlResourceParser 

 android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager, java.lang.String)'

 on a null object reference


 application下添加如下节点:



      android:name="android.support.v4.content.FileProvider"

      android:authorities="${applicationId}.provider"

      android:exported="false"

      android:grantUriPermissions="true">


         android:name="android.support.FILE_PROVIDER_PATHS"

         android:resource="@xml/file_paths" />


注意:如已添加其他sdk或项目中已使用过provider节点,

[请参考我的博客](http://blog.csdn.net/luck_mw/article/details/54970105)的解决方案


问题三:

PhotoView 库冲突,可以删除自己项目中引用的,Picture_library中已经引用过,或引用com.commit451:PhotoView:1.2.4版本

相册启动构造方法

FunctionOptions options = new FunctionOptions.Builder()

        .setType(selectType) // 图片or视频 FunctionConfig.TYPE_IMAGE  TYPE_VIDEO

        .setCropMode(copyMode) // 裁剪模式 默认、1:1、3:4、3:2、16:9

        .setCompress(isCompress) //是否压缩

        .setEnablePixelCompress(true) //是否启用像素压缩

        .setEnableQualityCompress(true) //是否启质量压缩

        .setMaxSelectNum(maxSelectNum) // 可选择图片的数量

        .setSelectMode(selectMode) // 单选 or 多选

        .setShowCamera(isShow) //是否显示拍照选项 这里自动根据type 启动拍照或录视频

        .setEnablePreview(enablePreview) // 是否打开预览选项

        .setEnableCrop(enableCrop) // 是否打开剪切选项

        .setPreviewVideo(isPreviewVideo) // 是否预览视频(播放) mode or 多选有效

        .setCheckedBoxDrawable(checkedBoxDrawable)

        .setRecordVideoDefinition(FunctionConfig.HIGH) // 视频清晰度

        .setRecordVideoSecond(60) // 视频秒数

        .setGif(false)// 是否显示gif图片,默认不显示

        .setCropW(cropW) // cropW-->裁剪宽度 值不能小于100  如果值大于图片原始宽高 将返回原图大小

        .setCropH(cropH) // cropH-->裁剪高度 值不能小于100 如果值大于图片原始宽高 将返回原图大小

        .setMaxB(maxB) // 压缩最大值 例如:200kb  就设置202400,202400 / 1024 = 200kb左右

        .setPreviewColor(previewColor) //预览字体颜色

        .setCompleteColor(completeColor) //已完成字体颜色

        .setPreviewBottomBgColor(previewBottomBgColor) //预览底部背景色

        .setBottomBgColor(bottomBgColor) //图片列表底部背景色

        .setGrade(Luban.THIRD_GEAR) // 压缩档次 默认三档

        .setCheckNumMode(isCheckNumMode)

        .setCompressQuality(100) // 图片裁剪质量,默认无损

        .setImageSpanCount(4) // 每行个数

        .setSelectMedia(selectMedia) // 已选图片,传入在次进去可选中,不能传入网络图片

        .setCompressFlag(compressFlag) // 1 系统自带压缩 2 luban压缩

        .setCompressW(compressW) // 压缩宽 如果值大于图片原始宽高无效

        .setCompressH(compressH) // 压缩高 如果值大于图片原始宽高无效

        .setThemeStyle(themeStyle) // 设置主题样式

        .create();

启动相册并拍照

 PictureConfig.getInstance().init(options).openPhoto(mContext, resultCallback);


 或默认配置

 PictureConfig.getInstance().openPhoto(mContext, resultCallback);

单独启动拍照或视频 根据type自动识别

 PictureConfig.getInstance().init(options).startOpenCamera(mContext, resultCallback);


 或默认配置

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

预览图片

 PictureConfig.getInstance().externalPicturePreview(mContext, position, selectMedia);

预览视频

PictureConfig.getInstance().externalPictureVideo(mContext, selectMedia.get(position).getPath());

图片回调完成结果返回

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

        @Override

        public void onSelectSuccess(List resultList) {

            selectMedia = resultList;

            Log.i("callBack_result", selectMedia.size() + "");

            LocalMedia media = resultList.get(0);

            if (media.isCut() && !media.isCompressed()) {

                // 裁剪过

                String path = media.getCutPath();

            } else if (media.isCompressed() || (media.isCut() && media.isCompressed())) {

                // 压缩过,或者裁剪同时压缩过,以最终压缩过图片为准

                String path = media.getCompressPath();

            } else {

                // 原图地址

                String path = media.getPath();

            }

            if (selectMedia != null) {

                adapter.setList(selectMedia);

                adapter.notifyDataSetChanged();

            }

        }

    };

更新日志:

版本 v1.4.1

1.修复单选快速点击重复bug

2.重命名string资源文件

========================================================

历史版本***

版本 v1.4.0

1.减小引入大小

版本 v1.3.9

1.修改相册启动方式

2.修复.webp格式图片压缩后后缀变为.jpg格式问题

3.修复多图裁剪快速点击,结果返回为空问题

4.修复快速点击启动相册重复问题

5.将activity通信由广播改为EventBus3.0

6.修复多图裁剪压缩bug

项目使用第三方库:

1.裁剪使用ucrop库

2.eventbus:3.0.0'

3.glide:3.7.0

4.rxjava:2.0.5

5.rxandroid:2.0.1

6.okhttp:3.2.0

7.PhotoView:1.2.4

8.Luban

兼容性测试:

腾讯优测-深度测试-通过率达到100%

演示效果:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容