android多图选择器 图片/视频 单选or多选,以及视频录制。
PictureSelector
最近项目中用到多图选择上传的需求,考虑到android机型众多问题就自己花时间写了一个,测试了大概60款机型,出现过一些问题也都一一修复了,基本上稳定了特分享出来,界面UI也是商用级的开发者不用在做太多修改了,界面高度自定义,可以设置符合你项目主色调的风格,集成完成后就可以拿来用。
项目会一直维护,发现问题欢迎提出会第一时间修复,QQ交流群 619458861,个人QQ 893855882@qq.com 希望用得着的朋友点个start。
功能特点:
- 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的配置~
重要的事情说三遍记得添加权限
- <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" />
注:适配android6.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>
集成步骤
方式一 compile引入
- dependencies {
- compile 'com.github.LuckSiege.PictureSelector:picture_library:v1.4.1'
- }
方式二 maven引入
step 1.
- <repositories>
- <repository>
- <id>jitpack.io</id>
- <url>https://jitpack.io</url>
- </repository>
- </repositories>
step 2.
- <dependency>
- <groupId>com.github.LuckSiege.PictureSelector</groupId>
- <artifactId>picture_library</artifactId>
- <version>v1.4.1</version>
- </dependency>
项目根目录
- 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下添加如下节点:
- <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版本
相册启动构造方法
- 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<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();
- }
- }
- };
更新日志:
版本 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%
演示效果:
android多图选择器 图片/视频 单选or多选,以及视频录制。的更多相关文章
- 一款多功能的移动端滚动选择器,支持单选到多选、支持多级级联、提供自定义回调函数、提供update函数二次渲染、重定位函数、兼容pc端拖拽等等..
https://github.com/onlyhom/mobileSelect.js/blob/master/docs/README-CN.md mobileSelect.js 一款多功能的移动端滚动 ...
- android -------- 流式布局,支持单选、多选等
最近开发中有流式标签这个功能,网上学了下,来分享一下 Android 流式布局,支持单选.多选等,适合用于产品标签等. 效果图: 用法: dependencies { compile 'com.hym ...
- Android实现选择题答题(包括单选、多选和答题卡)
在线答题demo,具体代码是一年多前完成的,比较简单,不再贴出,请参见Github. 主要功能: 单选:点击选项直接进入下一题.多选:选择多个选项,向右滑动进入下一题.答题卡:点击题号重新进入答题界面 ...
- Android 中图能够用到的图片处理类 BitmapUtils
Android在实际开发中非常多时候都要对图片进行一定的处理,这里总结的BitmapUtils 类包含一下几个功能: 1.Android图片倒影, 2.Android图片模糊处理, 3.Android ...
- [转]Android 超高仿微信图片选择器 图片该这么加载
快速加载本地图片缩略图的方法: 原文地址:Android 超高仿微信图片选择器 图片该这么加载 其示例代码下载: 仿微信图片选择器 ImageLoader
- Android 获取SDCard上图片和视频的缩略图
获取图片缩略图和视频缩略图的方法: Java代码: import java.io.File; import android.app.Activity; import android.graphics. ...
- Android多图选择
多图选择是Android中一个常用的功能,用户可以拍照或者批量选择图片上传,还是国际惯例,先看下效果图,demo地址我会放到文章末尾. 经过对比,这里我选择了一个第三方开源库PictureSelect ...
- Android中直播视频技术探究之---桌面屏幕视频数据源采集功能分析
一.前言 之前介绍了Android直播视频中一种视频源数据采集:摄像头Camera视频数据采集分析 中介绍了利用Camera的回调机制,获取摄像头的每一帧数据,然后进行二次处理进行推流.现在我们在介绍 ...
- Android开发技巧——自定义单选或多选的ListView
这篇其实应该是属于写自定义单选或多选的ListView的基础教程,无奈目前许多人对此的实现大多都绕了远路,反而使得这正规的写法倒显得有些技巧性了. 本文原创,转载请注明在CSDN上的出处: http: ...
随机推荐
- 行为型模式(三) 迭代器模式(Iterator)
一.动机(Motivate) 在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素:同时这种"透明 ...
- cookie,session,token介绍
本文目录 发展史 Cookie Session Token 回到目录 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档 ...
- [React] Use the React Effect Hook in Function Components
Similar to the State Hook, the Effect Hook is “first-class” in React and handy for performing side e ...
- RestTemplate 使用中的几个问题
Spring Boot使用RestTemplate消费REST服务的几个问题记录 我们可以通过Spring Boot快速开发REST接口,同时也可能需要在实现接口的过程中,通过Spring Boot调 ...
- .net之大文件断点续传
HTML部分 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.a ...
- Linux下安装Phalcon系统环境安装Phalcon 及 安装Phalcon Developer Tools
一.安装Phalcon Phalcon 需要用的的PHP扩展函数有如下: curl gettext gd2 (to use the Phalcon\Image\Adapter\Gd class) li ...
- 数码管一些列功能的verilog实现
将数码管各段发光元件的正极连在一起称为共阳数码管,且该共点击链接电路电源的正极,而各段的负极连接驱动电路.它适用于低电平有效的驱动电路,当某段的驱动电平为低电平时,该段发亮:将数码管各段发光元件的负极 ...
- 繁繁的数字 背包DP
繁繁的数字 背包DP 问一个数\(n\)有多少种二进制分解方案数 \(n\le 10^5\) 如7有7=4+2+1=4+1+1+1=2+2+2+1=2+2+1+1+1=2+1+1+1+1+1=1+1+ ...
- fedora安装设置
添加视频解码rpmfusion源: sudo rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-st ...
- 4、http协议之二
URL(Unifrom Resource Locator)简述 相对URL 从当前页面(同一个站点内或同一个文章内引用) 绝对URL 从当前页面或其他页面跳转而来(跨站引用) HTTPD版本<0 ...