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

luck1991 3年前
   <h2>介绍</h2>    <p>最近项目中用到多图选择上传的需求,考虑到android机型众多问题就自己花时间写了一个,测试了大概60款机型,出现过一些问题也都一一修复了,基本上稳定了特分享出来,界面UI也是商用级的开发者不用在做太多修改了,界面高度自定义,可以设置符合你项目主色调的风格,集成完成后就可以拿来用。</p>    <p>功能特点:</p>    <pre>  <code class="language-java">  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压缩档次设置        </code></pre>    <p>那些遇到拍照闪退问题的同学,请记得看清下面适配6.0的配置~</p>    <p>重要的事情说三遍记得添加权限</p>    <pre>  <code class="language-java">  <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" />        </code></pre>    <p>注:适配android6.0以上拍照问题,请在AndroidManifest.xml中添加标签</p>    <pre>  <code class="language-java"><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>    </code></pre>    <h2>集成步骤</h2>    <p>方式一 compile引入</p>    <pre>  <code class="language-java">dependencies {      compile 'com.github.LuckSiege.PictureSelector:picture_library:v1.4.2'  }    </code></pre>    <p>方式二 maven引入</p>    <p>step 1.</p>    <pre>  <code class="language-java"><repositories>         <repository>         <id>jitpack.io</id>   <url>https://jitpack.io</url>         </repository>   </repositories>  </code></pre>    <p>step 2.</p>    <pre>  <code class="language-java"><dependency>        <groupId>com.github.LuckSiege.PictureSelector</groupId>        <artifactId>picture_library</artifactId>        <version>v1.4.2</version>  </dependency>    </code></pre>    <p>项目根目录  </p>    <pre>  <code class="language-java">allprojects {     repositories {        jcenter()        maven { url 'https://jitpack.io' }     }  }  </code></pre>    <p>常见错误*</p>    <pre>  <code class="language-java"> 问题一:   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下添加如下节点:      <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>    注意:如已添加其他sdk或项目中已使用过provider节点,  [请参考我的博客](http://blog.csdn.net/luck_mw/article/details/54970105)的解决方案    问题三:  PhotoView 库冲突,可以删除自己项目中引用的,Picture_library中已经引用过,或引用com.commit451:PhotoView:1.2.4版本     </code></pre>    <p>相册启动构造方法</p>    <pre>  <code class="language-java">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();       </code></pre>    <pre>  <code class="language-java">或在application进行初始化配置    public class App extends Application {      @Override      public void onCreate() {          super.onCreate();          // application 初始化          FunctionOptions options = new FunctionOptions.Builder().create();          options.setType(FunctionConfig.TYPE_IMAGE);          options.setCompress(true);          options.setGrade(Luban.THIRD_GEAR);          PictureConfig.getInstance().init(options);      }  }  </code></pre>    <p>启动相册并拍照      </p>    <pre>  <code class="language-java"> PictureConfig.getInstance().init(options).openPhoto(mContext, resultCallback);      或默认配置   PictureConfig.getInstance().openPhoto(mContext, resultCallback);  </code></pre>    <p>单独启动拍照或视频 根据type自动识别      </p>    <pre>  <code class="language-java"> PictureConfig.getInstance().init(options).startOpenCamera(mContext, resultCallback);      或默认配置   PictureConfig.getInstance().startOpenCamera(mContext, resultCallback);  </code></pre>    <p>预览图片      </p>    <pre>  <code class="language-java"> PictureConfig.getInstance().externalPicturePreview(mContext, position, selectMedia);  </code></pre>    <p>预览视频</p>    <pre>  <code class="language-java">PictureConfig.getInstance().externalPictureVideo(mContext, selectMedia.get(position).getPath());  </code></pre>    <p>图片回调完成结果返回</p>    <pre>  <code class="language-java">  private PictureConfig.OnSelectResultCallback resultCallback = new PictureConfig.OnSelectResultCallback() {          @Override          public void onSelectSuccess(List<LocalMedia> 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();              }          }      };        </code></pre>    <h2>更新日志</h2>    <p>版本 v1.4.2</p>    <p>1.修复在application初始化第二次无效问题</p>    <p>========================================================</p>    <p>历史版本:</p>    <p>版本 v1.4.1</p>    <p>1.修复单选快速点击重复bug</p>    <p>2.重命名string资源文件</p>    <p>版本 v1.4.0</p>    <p>1.减小引入大小</p>    <p>版本 v1.3.9</p>    <p>1.修改相册启动方式</p>    <p>2.修复.webp格式图片压缩后后缀变为.jpg格式问题</p>    <p>3.修复多图裁剪快速点击,结果返回为空问题</p>    <p>4.修复快速点击启动相册重复问题</p>    <p>5.将activity通信由广播改为EventBus3.0</p>    <p>6.修复多图裁剪压缩bug</p>    <p>项目使用第三方库:</p>    <p>1.裁剪使用ucrop库</p>    <p>2.eventbus:3.0.0'</p>    <p>3.glide:3.7.0</p>    <p>4.rxjava:2.0.5</p>    <p>5.rxandroid:2.0.1</p>    <p>6.okhttp:3.2.0</p>    <p>7.PhotoView:1.2.4</p>    <p>8.Luban</p>    <p>兼容性测试:</p>    <p>腾讯优测-深度测试-通过率达到100%</p>    <p><a href="/misc/goto?guid=4959748221168943206"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/9f33325310927f412e7e552be757e3c9.png"></a></p>    <p>演示效果:</p>    <p><a href="/misc/goto?guid=4959748221265193670"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/ce8f965ce0bd70a777bb9d99da37b0d2.jpg"></a> <a href="/misc/goto?guid=4959748221343101030"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/9db2bf47c8ecfc043202a3326a6f6f07.jpg"></a> <a href="/misc/goto?guid=4959748221432750116"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/527cbf413622ecc304617a91317ca374.jpg"></a> <a href="/misc/goto?guid=4959748221513601540"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/c6613e566bcfac54124e68209767de1a.jpg"></a> <a href="/misc/goto?guid=4959748221601395784"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/126c188970f201cfb83510c1981b7404.jpg"></a> <a href="/misc/goto?guid=4959748221690162820"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/b94f459a2bd52ea9a65460617082cd47.jpg"></a> <a href="/misc/goto?guid=4959748221777399052"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/b939447bd5075402dc7c0ab0c0097ed0.jpg"></a> <a href="/misc/goto?guid=4959748221856515083"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/bde47e950a17cae322fe261998dc2779.jpg"></a> <a href="/misc/goto?guid=4959748221942256558"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/6e6ab2ea27161b77bbec6ac578fd0759.jpg"></a> <a href="/misc/goto?guid=4959748222026288212"><img alt="android多图选择器 图片/视频 单选or多选,以及视频录制。" src="https://simg.open-open.com/show/ba7c4a038613182020da9ce0152da5d4.jpg"></a></p>    <p>项目主页:<a href="http://www.open-open.com/lib/view/home/1493651113150">http://www.open-open.com/lib/view/home/1493651113150</a></p>