功能特點(diǎn):
??1.適配android6.0+系統(tǒng)
??2.解決部分機(jī)型裁剪閃退問(wèn)題
??3.解決圖片過(guò)大oom閃退問(wèn)題
??4.動(dòng)態(tài)獲取系統(tǒng)權(quán)限,避免閃退
??5.支持相片or視頻的單選和多選
??6.支持裁剪比例設(shè)置,如常用的?1:1、3:4、3:2、16:9?默認(rèn)為圖片大小
??7.支持視頻預(yù)覽
??8.支持gif圖片
??9.支持.webp格式圖片
??10.支持一些常用場(chǎng)景設(shè)置:如:是否裁剪、是否預(yù)覽圖片、是否顯示相機(jī)等
??11.新增自定義主題設(shè)置
??12.新增圖片勾選樣式設(shè)置
??13.新增圖片裁剪寬高設(shè)置
??14.新增圖片壓縮處理
??15.新增錄視頻最大時(shí)間設(shè)置
??16.新增視頻清晰度設(shè)置
??17.新增QQ選擇風(fēng)格,帶數(shù)字效果
??18.新增自定義?文字顏色?背景色讓風(fēng)格和項(xiàng)目更搭配
??19.新增多圖裁剪功能
??20.新增LuBan多圖壓縮
??21.新增單獨(dú)拍照功能
??22.新增壓縮大小設(shè)置
??23.新增Luban壓縮檔次設(shè)置
那些遇到拍照閃退問(wèn)題的同學(xué),請(qǐng)記得看清下面適配6.0的配置~
重要的事情說(shuō)三遍記得添加權(quán)限
??
??
??
注:適配android6.0以上拍照問(wèn)題,請(qǐng)?jiān)贏ndroidManifest.xml中添加標(biāo)簽
???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
項(xiàng)目根目錄 ?
allprojects?{
???repositories?{
??????jcenter()
??????maven?{?url?'https://jitpack.io'?}
???}
}
常見錯(cuò)誤*
?問(wèn)題一:
?rxjava沖突:在app?build.gradle下添加
?packagingOptions?{
???exclude?'META-INF/rxjava.properties'
?}??
?問(wèn)題二:
?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下添加如下節(jié)點(diǎn):
??????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或項(xiàng)目中已使用過(guò)provider節(jié)點(diǎn),
[請(qǐng)參考我的博客](http://blog.csdn.net/luck_mw/article/details/54970105)的解決方案
問(wèn)題三:
PhotoView?庫(kù)沖突,可以刪除自己項(xiàng)目中引用的,Picture_library中已經(jīng)引用過(guò),或引用com.commit451:PhotoView:1.2.4版本
相冊(cè)啟動(dòng)構(gòu)造方法
FunctionOptions?options?=?new?FunctionOptions.Builder()
????????.setType(selectType)?//?圖片or視頻?FunctionConfig.TYPE_IMAGE??TYPE_VIDEO
????????.setCropMode(copyMode)?//?裁剪模式?默認(rèn)、1:1、3:4、3:2、16:9
????????.setCompress(isCompress)?//是否壓縮
????????.setEnablePixelCompress(true)?//是否啟用像素壓縮
????????.setEnableQualityCompress(true)?//是否啟質(zhì)量壓縮
????????.setMaxSelectNum(maxSelectNum)?//?可選擇圖片的數(shù)量
????????.setSelectMode(selectMode)?//?單選?or?多選
????????.setShowCamera(isShow)?//是否顯示拍照選項(xiàng)?這里自動(dòng)根據(jù)type?啟動(dòng)拍照或錄視頻
????????.setEnablePreview(enablePreview)?//?是否打開預(yù)覽選項(xiàng)
????????.setEnableCrop(enableCrop)?//?是否打開剪切選項(xiàng)
????????.setPreviewVideo(isPreviewVideo)?//?是否預(yù)覽視頻(播放)?mode?or?多選有效
????????.setCheckedBoxDrawable(checkedBoxDrawable)
????????.setRecordVideoDefinition(FunctionConfig.HIGH)?//?視頻清晰度
????????.setRecordVideoSecond(60)?//?視頻秒數(shù)
????????.setGif(false)//?是否顯示gif圖片,默認(rèn)不顯示
????????.setCropW(cropW)?//?cropW-->裁剪寬度?值不能小于100??如果值大于圖片原始寬高?將返回原圖大小
????????.setCropH(cropH)?//?cropH-->裁剪高度?值不能小于100?如果值大于圖片原始寬高?將返回原圖大小
????????.setMaxB(maxB)?//?壓縮最大值?例如:200kb??就設(shè)置202400,202400?/?1024?=?200kb左右
????????.setPreviewColor(previewColor)?//預(yù)覽字體顏色
????????.setCompleteColor(completeColor)?//已完成字體顏色
????????.setPreviewBottomBgColor(previewBottomBgColor)?//預(yù)覽底部背景色
????????.setBottomBgColor(bottomBgColor)?//圖片列表底部背景色
????????.setGrade(Luban.THIRD_GEAR)?//?壓縮檔次?默認(rèn)三檔
????????.setCheckNumMode(isCheckNumMode)
????????.setCompressQuality(100)?//?圖片裁剪質(zhì)量,默認(rèn)無(wú)損
????????.setImageSpanCount(4)?//?每行個(gè)數(shù)
????????.setSelectMedia(selectMedia)?//?已選圖片,傳入在次進(jìn)去可選中,不能傳入網(wǎng)絡(luò)圖片
????????.setCompressFlag(compressFlag)?//?1?系統(tǒng)自帶壓縮?2?luban壓縮
????????.setCompressW(compressW)?//?壓縮寬?如果值大于圖片原始寬高無(wú)效
????????.setCompressH(compressH)?//?壓縮高?如果值大于圖片原始寬高無(wú)效
????????.setThemeStyle(themeStyle)?//?設(shè)置主題樣式
????????.create();
啟動(dòng)相冊(cè)并拍照
?PictureConfig.getInstance().init(options).openPhoto(mContext,?resultCallback);
?或默認(rèn)配置
?PictureConfig.getInstance().openPhoto(mContext,?resultCallback);
單獨(dú)啟動(dòng)拍照或視頻 根據(jù)type自動(dòng)識(shí)別
?PictureConfig.getInstance().init(options).startOpenCamera(mContext,?resultCallback);
?或默認(rèn)配置
?PictureConfig.getInstance().startOpenCamera(mContext,?resultCallback);
預(yù)覽圖片
?PictureConfig.getInstance().externalPicturePreview(mContext,?position,?selectMedia);
預(yù)覽視頻
PictureConfig.getInstance().externalPictureVideo(mContext,?selectMedia.get(position).getPath());
圖片回調(diào)完成結(jié)果返回
??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())?{
????????????????//?裁剪過(guò)
????????????????String?path?=?media.getCutPath();
????????????}?else?if?(media.isCompressed()?||?(media.isCut()?&&?media.isCompressed()))?{
????????????????//?壓縮過(guò),或者裁剪同時(shí)壓縮過(guò),以最終壓縮過(guò)圖片為準(zhǔn)
????????????????String?path?=?media.getCompressPath();
????????????}?else?{
????????????????//?原圖地址
????????????????String?path?=?media.getPath();
????????????}
????????????if?(selectMedia?!=?null)?{
????????????????adapter.setList(selectMedia);
????????????????adapter.notifyDataSetChanged();
????????????}
????????}
????};
========================================================
2.修復(fù).webp格式圖片壓縮后后綴變?yōu)?jpg格式問(wèn)題
3.修復(fù)多圖裁剪快速點(diǎn)擊,結(jié)果返回為空問(wèn)題
4.修復(fù)快速點(diǎn)擊啟動(dòng)相冊(cè)重復(fù)問(wèn)題
騰訊優(yōu)測(cè)-深度測(cè)試-通過(guò)率達(dá)到100%