一款在github上針對android平臺下的圖片選擇器,支持從相冊或拍照選擇圖片或視頻北苟、音頻桩匪,支持動態(tài)權(quán)限獲取、裁剪(單圖or多圖裁剪)友鼻、壓縮傻昙、主題自定義配置等功能、適配android 6.0+系統(tǒng)的開源圖片選擇框架
https://github.com/LuckSiege/PictureSelector
dependencies {
compile 'com.github.LuckSiege.PictureSelector:picture_library:v2.1.7'
}
glide沖突
由于PictureSelector 2.0引入的是最新的glide 4.0.0,所以將項(xiàng)目中老版本的glide刪除,并且將報(bào)錯代碼換成如下寫法:
RequestOptions options = new RequestOptions();
options.placeholder(R.drawable.image);
Glide.with(context).load(url).apply(options).into(imageView);
// 進(jìn)入相冊 以下是例子:用不到的api可以不寫
PictureSelector.create(MainActivity.this)
.openGallery()//全部.PictureMimeType.ofAll()桃移、圖片.ofImage()、視頻.ofVideo()葛碧、音頻.ofAudio()
.theme()//主題樣式(不設(shè)置為默認(rèn)樣式) 也可參考demo values/styles下 例如:R.style.picture.white.style
.maxSelectNum()// 最大圖片選擇數(shù)量 int
.minSelectNum()// 最小選擇數(shù)量 int
.imageSpanCount(4)// 每行顯示個數(shù) int
.selectionMode()// 多選 or 單選 PictureConfig.MULTIPLE or PictureConfig.SINGLE
.previewImage()// 是否可預(yù)覽圖片 true or false
.previewVideo()// 是否可預(yù)覽視頻 true or false
.enablePreviewAudio() // 是否可播放音頻 true or false
.isCamera()// 是否顯示拍照按鈕 true or false
.imageFormat(PictureMimeType.PNG)// 拍照保存圖片格式后綴,默認(rèn)jpeg
.isZoomAnim(true)// 圖片列表點(diǎn)擊 縮放效果 默認(rèn)true
.sizeMultiplier(0.5f)// glide 加載圖片大小 0~1之間 如設(shè)置 .glideOverride()無效
.setOutputCameraPath("/CustomPath")// 自定義拍照保存路徑,可不填
.enableCrop()// 是否裁剪 true or false
.compress()// 是否壓縮 true or false
.glideOverride()// int glide 加載寬高借杰,越小圖片列表越流暢,但會影響列表圖片瀏覽的清晰度
.withAspectRatio()// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定義
.hideBottomControls()// 是否顯示uCrop工具欄进泼,默認(rèn)不顯示 true or false
.isGif()// 是否顯示gif圖片 true or false
.compressSavePath(getPath())//壓縮圖片保存地址
.freeStyleCropEnabled()// 裁剪框是否可拖拽 true or false
.circleDimmedLayer()// 是否圓形裁剪 true or false
.showCropFrame()// 是否顯示裁剪矩形邊框 圓形裁剪時建議設(shè)為false true or false
.showCropGrid()// 是否顯示裁剪矩形網(wǎng)格 圓形裁剪時建議設(shè)為false true or false
.openClickSound()// 是否開啟點(diǎn)擊聲音 true or false
.selectionMedia()// 是否傳入已選圖片 List<LocalMedia> list
.previewEggs()// 預(yù)覽圖片時 是否增強(qiáng)左右滑動圖片體驗(yàn)(圖片滑動一半即可看到上一張是否選中) true or false
.cropCompressQuality()// 裁剪壓縮質(zhì)量 默認(rèn)90 int
.minimumCompressSize(100)// 小于100kb的圖片不壓縮
.synOrAsy(true)//同步true或異步false 壓縮 默認(rèn)同步
.cropWH()// 裁剪寬高比蔗衡,設(shè)置如果大于圖片本身寬高則無效 int
.rotateEnabled() // 裁剪是否可旋轉(zhuǎn)圖片 true or false
.scaleEnabled()// 裁剪是否可放大縮小圖片 true or false
.videoQuality()// 視頻錄制質(zhì)量 0 or 1 int
.videoMaxSecond(15)// 顯示多少秒以內(nèi)的視頻or音頻也可適用 int
.videoMinSecond(10)// 顯示多少秒以內(nèi)的視頻or音頻也可適用 int
.recordVideoSecond()//視頻秒數(shù)錄制 默認(rèn)60s int
.forResult(PictureConfig.CHOOSE_REQUEST);//結(jié)果回調(diào)onActivityResult code
清除緩存
//包括裁剪和壓縮后的緩存,要在上傳成功后調(diào)用乳绕,注意:需要系統(tǒng)sd卡權(quán)限
PictureFileUtils.deleteCacheDirFile(MainActivity.this);
啟動相冊并拍照
PictureSelector.create(MainActivity.this)
.openGallery(PictureMimeType.ofImage())
.forResult(PictureConfig.CHOOSE_REQUEST);
單獨(dú)啟動拍照或視頻 根據(jù)PictureMimeType自動識別
PictureSelector.create(MainActivity.this)
.openCamera(PictureMimeType.ofImage())
.forResult(PictureConfig.CHOOSE_REQUEST);
預(yù)覽圖片
// 預(yù)覽圖片 可自定長按保存路徑
PictureSelector.create(MainActivity.this).externalPicturePreview(position, "/custom_file", selectList);
PictureSelector.create(MainActivity.this).externalPicturePreview(position, selectList);
預(yù)覽視頻
PictureSelector.create(MainActivity.this).externalPictureVideo(video_path);
結(jié)果回調(diào)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PictureConfig.CHOOSE_REQUEST:
// 圖片選擇結(jié)果回調(diào)
List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
// 例如 LocalMedia 里面返回三種path
// 1.media.getPath(); 為原圖path
// 2.media.getCutPath();為裁剪后path绞惦,需判斷media.isCut();是否為true
// 3.media.getCompressPath();為壓縮后path,需判斷media.isCompressed();是否為true
// 如果裁剪并壓縮了洋措,以取壓縮路徑為準(zhǔn)济蝉,因?yàn)槭窍炔眉艉髩嚎s的
adapter.setList(selectList);
adapter.notifyDataSetChanged();
break;
}
}
}