Java源码示例:com.luck.picture.lib.PictureSelector
示例1
@OnClick({R.id.vid_aqi_select_btn, R.id.vid_aqi_tv})
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.vid_aqi_select_btn:
// 初始化图片配置
PictureSelectorUtils.PicConfig picConfig = new PictureSelectorUtils.PicConfig()
.setCompress(false).setMaxSelectNum(1).setCrop(false).setMimeType(PictureMimeType.ofImage())
.setCamera(true).setGif(false);
// 打开图片选择器
PictureSelectorUtils.openGallery(PictureSelector.create(this), picConfig);
break;
case R.id.vid_aqi_tv:
String text = TextViewUtils.getText(vid_aqi_tv);
if (TextUtils.isEmpty(text)) return;
// 复制到剪切板
ClipboardUtils.copyText(text);
// 进行提示
ToastTintUtils.success(ResourceUtils.getString(R.string.copy_suc) + " -> " + text);
break;
}
}
示例2
/**
* 拍摄视频
*/
private void openVideo() {
int quality = this.cameraOptions.getInt("quality");
int MaxSecond = this.cameraOptions.getInt("MaxSecond");
int MinSecond = this.cameraOptions.getInt("MinSecond");
int recordVideoSecond = this.cameraOptions.getInt("recordVideoSecond");
int imageCount = this.cameraOptions.getInt("imageCount");
Activity currentActivity = getCurrentActivity();
PictureSelector.create(currentActivity)
.openCamera(PictureMimeType.ofVideo())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
.loadImageEngine(GlideEngine.createGlideEngine())
.selectionMedia(selectList) // 当前已选中的图片 List
.openClickSound(false)// 是否开启点击声音 true or false
.maxSelectNum(imageCount)// 最大图片选择数量 int
.minSelectNum(0)// 最小选择数量 int
.imageSpanCount(4)// 每行显示个数 int
.selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
.previewVideo(true)// 是否可预览视频 true or false
.videoQuality(quality)// 视频录制质量 0 or 1 int
.videoMaxSecond(MaxSecond)// 显示多少秒以内的视频or音频也可适用 int
.videoMinSecond(MinSecond)// 显示多少秒以内的视频or音频也可适用 int
.recordVideoSecond(recordVideoSecond)//视频秒数录制 默认60s int
.forResult(PictureConfig.REQUEST_CAMERA);//结果回调onActivityResult code
}
示例3
public void onActivityResult(int requestCode, int resultCode, Intent data) {
LoggerManager.i("onActivityResult", "path:");
if (resultCode == Activity.RESULT_OK) {
if (requestCode != mRequestCode) return;
// 图片、视频、音频选择结果回调
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 注意:音视频除外
// 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
List<String> list = new ArrayList<>();
for (LocalMedia item : selectList) {
list.add(item.getPath());
LoggerManager.i("onActivityResult", "path:" + item.getPath());
}
if (mOnImageSelect != null) {
mOnImageSelect.onImageSelect(mRequestCode, list);
}
}
}
示例4
@OnClick({R.id.vid_agf_select_btn})
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.vid_agf_select_btn:
// 初始化图片配置
PictureSelectorUtils.PicConfig picConfig = new PictureSelectorUtils.PicConfig()
.setCompress(false).setMaxSelectNum(1).setCrop(false).setMimeType(PictureMimeType.ofImage())
.setCamera(true).setGif(false);
// 打开图片选择器
PictureSelectorUtils.openGallery(PictureSelector.create(this), picConfig);
break;
}
}
示例5
@OnClick({R.id.vid_aarc_select_btn})
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.vid_aarc_select_btn:
AppUtils.startActivityForResult(new ActivityUtils.ResultCallback() {
@Override
public boolean onStartActivityForResult(Activity activity) {
// 初始化图片配置
PictureSelectorUtils.PicConfig picConfig = new PictureSelectorUtils.PicConfig()
.setCompress(false).setMaxSelectNum(1).setCrop(false).setMimeType(PictureMimeType.ofImage())
.setCamera(true).setGif(false);
// 打开图片选择器
PictureSelectorUtils.openGallery(PictureSelector.create(activity), picConfig);
return true;
}
@Override
public void onActivityResult(boolean result, int resultCode, Intent data) {
if (result && data != null) {
LocalMedia localMedia = PictureSelectorUtils.getSingleMedia(data);
// 获取图片地址
String imgPath = PictureSelectorUtils.getLocalMediaPath(localMedia, true);
// 提示
ToastTintUtils.success("选择了图片: " + imgPath);
} else {
showToast(false, "非成功操作");
}
}
});
break;
}
}
示例6
@OnClick({R.id.vid_ass_flashlight_igview, R.id.vid_ass_square_igview,
R.id.vid_ass_hexagon_igview, R.id.vid_ass_annulus_igview, R.id.vid_ass_image_igview})
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.vid_ass_flashlight_igview:
if (!FlashlightUtils.isFlashlightEnable()) {
showToast(false, "暂不支持开启手电筒");
return;
}
// 设置开关
setFlashlight(!ViewUtils.isSelected(vid_ass_flashlight_igview));
break;
case R.id.vid_ass_square_igview:
ProjectUtils.refShape(vid_ass_scanview, ScanShapeView.Shape.Square);
break;
case R.id.vid_ass_hexagon_igview:
ProjectUtils.refShape(vid_ass_scanview, ScanShapeView.Shape.Hexagon);
break;
case R.id.vid_ass_annulus_igview:
ProjectUtils.refShape(vid_ass_scanview, ScanShapeView.Shape.Annulus);
break;
case R.id.vid_ass_image_igview:
// 初始化图片配置
PictureSelectorUtils.PicConfig picConfig = new PictureSelectorUtils.PicConfig()
.setCompress(false).setMaxSelectNum(1).setCrop(false).setMimeType(PictureMimeType.ofImage())
.setCamera(true).setGif(false);
// 打开图片选择器
PictureSelectorUtils.openGallery(PictureSelector.create(this), picConfig);
break;
}
}
示例7
@OnClick({R.id.vid_agf_select_btn})
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.vid_agf_select_btn:
// 初始化图片配置
PictureSelectorUtils.PicConfig picConfig = new PictureSelectorUtils.PicConfig()
.setCompress(false).setMaxSelectNum(1).setCrop(false).setMimeType(PictureMimeType.ofImage())
.setCamera(true).setGif(false);
// 打开图片选择器
PictureSelectorUtils.openGallery(PictureSelector.create(this), picConfig);
break;
}
}
示例8
/**
* 打开相册拍照
* @param pictureSelector {@link PictureSelector}
* @param picConfig {@link PicConfig}
* @return {@code true} success, {@code false} fail
*/
public static boolean openCamera(final PictureSelector pictureSelector, final PicConfig picConfig) {
PictureSelectionModel pictureSelectionModel = getPictureSelectionModel(pictureSelector, picConfig, true);
if (pictureSelectionModel != null) {
pictureSelectionModel.forResult(PIC_REQUEST_CODE);
return true;
}
return false;
}
示例9
/**
* 打开相册选择
* @param pictureSelector {@link PictureSelector}
* @param picConfig {@link PicConfig}
* @return {@code true} success, {@code false} fail
*/
public static boolean openGallery(final PictureSelector pictureSelector, final PicConfig picConfig) {
PictureSelectionModel pictureSelectionModel = getPictureSelectionModel(pictureSelector, picConfig, false);
if (pictureSelectionModel != null) {
pictureSelectionModel.forResult(PIC_REQUEST_CODE);
return true;
}
return false;
}
示例10
/**
* 打开相机
*/
private void openCamera() {
boolean isCrop = this.cameraOptions.getBoolean("isCrop");
int CropW = this.cameraOptions.getInt("CropW");
int CropH = this.cameraOptions.getInt("CropH");
boolean showCropCircle = this.cameraOptions.getBoolean("showCropCircle");
boolean showCropFrame = this.cameraOptions.getBoolean("showCropFrame");
boolean showCropGrid = this.cameraOptions.getBoolean("showCropGrid");
boolean compress = this.cameraOptions.getBoolean("compress");
boolean freeStyleCropEnabled = this.cameraOptions.getBoolean("freeStyleCropEnabled");
boolean rotateEnabled = this.cameraOptions.getBoolean("rotateEnabled");
boolean scaleEnabled = this.cameraOptions.getBoolean("scaleEnabled");
int minimumCompressSize = this.cameraOptions.getInt("minimumCompressSize");
int quality = this.cameraOptions.getInt("quality");
Boolean isAndroidQ = SdkVersionUtils.checkedAndroid_Q();
Activity currentActivity = getCurrentActivity();
PictureSelector.create(currentActivity)
.openCamera(PictureMimeType.ofImage())
.loadImageEngine(GlideEngine.createGlideEngine())
.imageFormat(isAndroidQ ? PictureMimeType.PNG_Q : PictureMimeType.PNG)// 拍照保存图片格式后缀,默认jpeg
.enableCrop(isCrop)// 是否裁剪 true or false
.compress(compress)// 是否压缩 true or false
.glideOverride(160, 160)// int glide 加载宽高,越小图片列表越流畅,但会影响列表图片浏览的清晰度
.withAspectRatio(CropW, CropH)// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
.hideBottomControls(isCrop)// 是否显示uCrop工具栏,默认不显示 true or false
.freeStyleCropEnabled(freeStyleCropEnabled)// 裁剪框是否可拖拽 true or false
.circleDimmedLayer(showCropCircle)// 是否圆形裁剪 true or false
.showCropFrame(showCropFrame)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false true or false
.showCropGrid(showCropGrid)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false true or false
.openClickSound(false)// 是否开启点击声音 true or false
.cropCompressQuality(quality)// 裁剪压缩质量 默认90 int
.minimumCompressSize(minimumCompressSize)// 小于100kb的图片不压缩
.synOrAsy(true)//同步true或异步false 压缩 默认同步
.rotateEnabled(rotateEnabled) // 裁剪是否可旋转图片 true or false
.scaleEnabled(scaleEnabled)// 裁剪是否可放大缩小图片 true or false
.forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code
}
示例11
/**
* 选择视频
*/
private void openVideoPicker() {
int quality = this.cameraOptions.getInt("quality");
int MaxSecond = this.cameraOptions.getInt("MaxSecond");
int MinSecond = this.cameraOptions.getInt("MinSecond");
int recordVideoSecond = this.cameraOptions.getInt("recordVideoSecond");
int videoCount = this.cameraOptions.getInt("imageCount");
boolean isCamera = this.cameraOptions.getBoolean("allowTakeVideo");
Activity currentActivity = getCurrentActivity();
PictureSelector.create(currentActivity)
.openGallery(PictureMimeType.ofVideo())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
.loadImageEngine(GlideEngine.createGlideEngine())
.selectionMedia(selectList) // 当前已选中的视频 List
.openClickSound(false)// 是否开启点击声音 true or false
.isCamera(isCamera)// 是否显示拍照按钮 true or false
.maxSelectNum(videoCount)// 最大视频选择数量 int
.minSelectNum(1)// 最小选择数量 int
.imageSpanCount(4)// 每行显示个数 int
.selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
.previewVideo(true)// 是否可预览视频 true or false
.videoQuality(quality)// 视频录制质量 0 or 1 int
.videoMaxSecond(MaxSecond)// 显示多少秒以内的视频or音频也可适用 int
.videoMinSecond(MinSecond)// 显示多少秒以内的视频or音频也可适用 int
.recordVideoSecond(recordVideoSecond)//视频秒数录制 默认60s int
.forResult(PictureConfig.REQUEST_CAMERA);//结果回调onActivityResult code
}
示例12
private void onGetVideoResult(Intent data) {
List<LocalMedia> mVideoSelectList = PictureSelector.obtainMultipleResult(data);
boolean isRecordSelected = cameraOptions.getBoolean("isRecordSelected");
if (!mVideoSelectList.isEmpty() && isRecordSelected) {
selectList = mVideoSelectList;
}
WritableArray videoList = new WritableNativeArray();
for (LocalMedia media : mVideoSelectList) {
if (TextUtils.isEmpty(media.getPath())) {
continue;
}
WritableMap videoMap = new WritableNativeMap();
Boolean isAndroidQ = SdkVersionUtils.checkedAndroid_Q();
String filePath = isAndroidQ ? media.getAndroidQToPath() : media.getPath();
videoMap.putString("uri", "file://" + filePath);
videoMap.putString("coverUri", "file://" + this.getVideoCover(filePath));
videoMap.putString("fileName", new File(media.getPath()).getName());
videoMap.putDouble("size", new File(media.getPath()).length());
videoMap.putDouble("duration", media.getDuration() / 1000.00);
videoMap.putInt("width", media.getWidth());
videoMap.putInt("height", media.getHeight());
videoMap.putString("type", "video");
videoMap.putString("mime", media.getMimeType());
videoList.pushMap(videoMap);
}
invokeSuccessWithResult(videoList);
}
示例13
private void onGetResult(Intent data) {
List<LocalMedia> tmpSelectList = PictureSelector.obtainMultipleResult(data);
boolean isRecordSelected = cameraOptions.getBoolean("isRecordSelected");
if (!tmpSelectList.isEmpty() && isRecordSelected) {
selectList = tmpSelectList;
}
WritableArray imageList = new WritableNativeArray();
boolean enableBase64 = cameraOptions.getBoolean("enableBase64");
for (LocalMedia media : tmpSelectList) {
imageList.pushMap(getImageResult(media, enableBase64));
}
invokeSuccessWithResult(imageList);
}
示例14
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case PictureConfig.CHOOSE_REQUEST:
// 图片选择结果回调
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
// 4.media.getOriginalPath()); media.isOriginal());为true时此字段才有值
// 5.media.getAndroidQToPath();为Android Q版本特有返回的字段,此字段有值就用来做上传使用
// 如果同时开启裁剪和压缩,则取压缩路径为准因为是先裁剪后压缩
for (LocalMedia media : selectList) {
Log.i(TAG, "是否压缩:" + media.isCompressed());
Log.i(TAG, "压缩:" + media.getCompressPath());
Log.i(TAG, "原图:" + media.getPath());
Log.i(TAG, "是否裁剪:" + media.isCut());
Log.i(TAG, "裁剪:" + media.getCutPath());
Log.i(TAG, "是否开启原图:" + media.isOriginal());
Log.i(TAG, "原图路径:" + media.getOriginalPath());
Log.i(TAG, "Android Q 特有Path:" + media.getAndroidQToPath());
}
mAdapter.setList(selectList);
mAdapter.notifyDataSetChanged();
break;
}
}
}
示例15
@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:
// 图片选择结果回调
List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
// 例如 LocalMedia 里面返回五种path
// 1.media.getPath(); 原图path
// 2.media.getCutPath();裁剪后path,需判断media.isCut();切勿直接使用
// 3.media.getCompressPath();压缩后path,需判断media.isCompressed();切勿直接使用
// 4.media.getOriginalPath()); media.isOriginal());为true时此字段才有值
// 5.media.getAndroidQToPath();Android Q版本特有返回的字段,但如果开启了压缩或裁剪还是取裁剪或压缩路径;注意:.isAndroidQTransform 为false 此字段将返回空
// 如果同时开启裁剪和压缩,则取压缩路径为准因为是先裁剪后压缩
for (LocalMedia media : selectList) {
Log.i(TAG, "是否压缩:" + media.isCompressed());
Log.i(TAG, "压缩:" + media.getCompressPath());
Log.i(TAG, "原图:" + media.getPath());
Log.i(TAG, "是否裁剪:" + media.isCut());
Log.i(TAG, "裁剪:" + media.getCutPath());
Log.i(TAG, "是否开启原图:" + media.isOriginal());
Log.i(TAG, "原图路径:" + media.getOriginalPath());
Log.i(TAG, "Android Q 特有Path:" + media.getAndroidQToPath());
Log.i(TAG, "宽高: " + media.getWidth() + "x" + media.getHeight());
Log.i(TAG, "Size: " + media.getSize());
// TODO 可以通过PictureSelectorExternalUtils.getExifInterface();方法获取一些额外的资源信息,如旋转角度、经纬度等信息
}
mAdapter.setList(selectList);
mAdapter.notifyDataSetChanged();
break;
}
}
}
示例16
public void selectPicture(int requestCode, OnImageSelect onImageSelect) {
this.mOnImageSelect = onImageSelect;
this.mRequestCode = requestCode;
PictureSelector.create(mContext)
.openGallery(PictureMimeType.ofImage())
.theme(StatusBarUtil.isSupportStatusBarFontChange() ? R.style.PicturePickerStyle : R.style.PicturePickerStyle_White)
.selectionMode(PictureConfig.SINGLE)
.forResult(mRequestCode);
}
示例17
public void selectPicture(int requestCode, int count, OnImageSelect onImageSelect) {
this.mOnImageSelect = onImageSelect;
this.mRequestCode = requestCode;
PictureSelector.create(mContext)
.openGallery(PictureMimeType.ofImage())
.theme(StatusBarUtil.isSupportStatusBarFontChange() ? R.style.PicturePickerStyle : R.style.PicturePickerStyle_White)
.maxSelectNum(count)
.selectionMode(PictureConfig.TYPE_PICTURE)
.forResult(mRequestCode);
}
示例18
public void selectFile(int requestCode, int count, OnImageSelect onImageSelect) {
this.mOnImageSelect = onImageSelect;
this.mRequestCode = requestCode;
PictureSelector.create(mContext)
.openGallery(PictureMimeType.ofImage())
.theme(StatusBarUtil.isSupportStatusBarFontChange() ? R.style.PicturePickerStyle : R.style.PicturePickerStyle_White)
.maxSelectNum(count)
.selectionMode(PictureConfig.TYPE_ALL)
.forResult(mRequestCode);
}
示例19
@Override
public void onModifyArticle(int type) {
if (type == FileTypeDialog.OTHER) {
new LFilePicker()
.withActivity(this)
.withRequestCode(REQUEST_FILE_CODE)
.withStartPath(Environment.getExternalStorageDirectory().getAbsolutePath())
.withMutilyMode(true)
.withMaxNum(9)
.start();
// .withActivity(this)
// .withRequestCode(REQUEST_FILE_CODE)
// .withTitle("文件选择")
// .withIconStyle(Constant.ICON_STYLE_YELLOW)
//
// //指定初始显示路径
// .withIsGreater(false)//过滤文件大小 小于指定大小的文件
// .withFileSize(1024 * 1024 * 1024)//指定文件大小为1G`
// .withChooseMode(false)//文件夹选择模式
// //.withFileFilter(new String[]{"txt", "png", "docx"})
// .start();
return;
}
int mimeType;
switch (type) {
case FileTypeDialog.PIC:
mimeType = PictureMimeType.ofImage();
break;
case FileTypeDialog.VIDEO:
mimeType = PictureMimeType.ofVideo();
break;
case FileTypeDialog.AUDIO:
mimeType = PictureMimeType.ofAudio();
break;
default:
mimeType = PictureMimeType.ofImage();
break;
}
int picWidth = UIUtils.dip2px(this, 50);
PictureSelector.create(this)
.openGallery(mimeType)// 全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
.maxSelectNum(9)// 最大图片选择数量
.minSelectNum(1)// 最小选择数量
.imageSpanCount(3)// 每行显示个数
.selectionMode(PictureConfig.MULTIPLE)// 多选 or 单选
.previewImage(mimeType == PictureMimeType.ofImage())// 是否可预览图片 true or false
.previewVideo(mimeType == PictureMimeType.ofVideo())// 是否可预览视频
.enablePreviewAudio(mimeType == PictureMimeType.ofAudio())// 是否可播放音频 true or false
.isZoomAnim(true)// 图片列表点击 缩放效果 默认true
.synOrAsy(true)//同步true或异步false 压缩 默认同步
.glideOverride(picWidth, picWidth)// glide 加载宽高,越小图片列表越流畅,但会影响列表图片浏览的清晰度
.hideBottomControls(false)// 是否显示uCrop工具栏,默认不显示
.isGif(false)// 是否显示gif图片
.freeStyleCropEnabled(true)// 裁剪框是否可拖拽
.minimumCompressSize(100)// 小于100kb的图片不压缩
.forResult(REQUEST_MEDIA_CODE);//结果回调onActivityResult code
}
示例20
@OnClick({R.id.vid_aqc_create_btn, R.id.vid_aqc_select_btn})
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.vid_aqc_create_btn:
String text = EditTextUtils.getText(vid_aqc_content_edit);
// 判断是否存在内容
if (TextUtils.isEmpty(text)) {
showToast(false, "请输入生成二维码内容");
return;
}
int size = SizeUtils.dipConvertPx(200f);
// 创建二维码
ZXingQRCodeUtils.createQRCodeImage(text, size, selectBitmap, new ZXingQRCodeUtils.QRResultCallBack() {
@Override
public void onResult(boolean success, Bitmap bitmap, Exception e) {
if (success) {
HandlerUtils.postRunnable(new Runnable() {
@Override
public void run() {
ImageViewUtils.setImageBitmap(vid_aqc_igview, bitmap);
}
});
} else {
showToast(false, ThrowableUtils.getThrowable(e));
}
}
});
break;
case R.id.vid_aqc_select_btn:
// 初始化图片配置
PictureSelectorUtils.PicConfig picConfig = new PictureSelectorUtils.PicConfig()
.setCompress(false).setMaxSelectNum(1).setCrop(false).setMimeType(PictureMimeType.ofImage())
.setCamera(true).setGif(false);
// 打开图片选择器
PictureSelectorUtils.openGallery(PictureSelector.create(this), picConfig);
break;
}
}
示例21
/**
* 获取图片选择配置模型
* <pre>
* // 结果回调 onActivityResult requestCode
* pictureSelectionModel.forResult(requestCode);
* </pre>
* @param pictureSelector {@link PictureSelector}
* @param picConfig {@link PicConfig}
* @param isCamera 是否拍照
* @return {@link PictureSelectionModel}
*/
public static PictureSelectionModel getPictureSelectionModel(final PictureSelector pictureSelector,
final PicConfig picConfig, final boolean isCamera) {
if (pictureSelector != null && picConfig != null) {
// 图片选择配置模型
PictureSelectionModel pictureSelectionModel;
// 相册选择类型
if (isCamera) {
pictureSelectionModel = pictureSelector.openCamera(picConfig.mimeType);
} else {
pictureSelectionModel = pictureSelector.openGallery(picConfig.mimeType);
}
// 是否裁减
boolean isCrop = picConfig.isCrop;
// 是否圆形裁减
boolean isCircleCrop = picConfig.isCircleCrop;
// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
pictureSelectionModel.selectionMode(picConfig.selectionMode)
.previewImage(true) // 是否可预览图片 true or false
.previewVideo(true) // 是否可以预览视频 true or false
.enablePreviewAudio(true) // 是否可播放音频 true or false
.isZoomAnim(true) // 图片列表点击 缩放效果 默认 true
.previewEggs(true) // 预览图片时是否增强左右滑动图片体验 ( 图片滑动一半即可看到上一张是否选中 ) true or false
.imageSpanCount(picConfig.imageSpanCount)// 每行显示个数 int
.minSelectNum(picConfig.minSelectNum) // 最小选择数量 int
.maxSelectNum(picConfig.maxSelectNum) // 最大图片选择数量 int
.isCamera(picConfig.isCamera) // 是否显示拍照按钮 true or false
.isGif(picConfig.isGif) // 是否显示 Gif true or false
// = 压缩相关 =
.compress(picConfig.isCompress) // 是否压缩 true or false
.minimumCompressSize(picConfig.minimumCompressSize) // 小于 xxkb 的图片不压缩
.withAspectRatio(picConfig.withAspectRatio[0], picConfig.withAspectRatio[1]) // 裁剪比例 如 16:9 3:2 3:4 1:1 可自定义
// = 裁减相关 =
// 判断是否显示圆形裁减
.circleDimmedLayer(isCircleCrop)
// = 裁减配置 =
.enableCrop(isCrop) // 是否裁剪 true or false
.freeStyleCropEnabled(isCrop) // 裁剪框是否可拖拽 true or false
.showCropFrame(isCircleCrop ? false : isCrop) // 是否显示裁剪矩形边框 圆形裁剪时建议设为 false
.showCropGrid(isCircleCrop ? false : isCrop) // 是否显示裁剪矩形网格 圆形裁剪时建议设为 false
.rotateEnabled(isCrop) // 裁剪是否可旋转图片 true or false
.scaleEnabled(isCrop); // 裁剪是否可放大缩小图片 true or false
// 设置拍照保存地址
if (!TextUtils.isEmpty(picConfig.cameraSavePath)) {
pictureSelectionModel.setOutputCameraPath(picConfig.cameraSavePath);
}
// 设置压缩图片保存地址
if (!TextUtils.isEmpty(picConfig.compressSavePath)) {
pictureSelectionModel.compressSavePath(picConfig.compressSavePath);
}
// 判断是否存在选中资源
if (picConfig.localMedia != null && picConfig.localMedia.size() != 0) {
pictureSelectionModel.selectionMedia(picConfig.localMedia);
}
return pictureSelectionModel;
}
return null;
}
示例22
public static void choosePhoto(Activity context, int requestCode) {
PictureSelector.create(context)
.openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
// .theme()//主题样式(不设置为默认样式) 也可参考demo values/styles下 例如:R.style.picture.white.style
.maxSelectNum(1)// 最大图片选择数量 int
// .minSelectNum()// 最小选择数量 int
.imageSpanCount(4)// 每行显示个数 int
.selectionMode(PictureConfig.SINGLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
// .previewImage()// 是否可预览图片 true or false
// .previewVideo()// 是否可预览视频 true or false
// .enablePreviewAudio() // 是否可播放音频 true or false
.isCamera(true)// 是否显示拍照按钮 true or false
// .imageFormat(PictureMimeType.PNG)// 拍照保存图片格式后缀,默认jpeg
.isZoomAnim(true)// 图片列表点击 缩放效果 默认true
.sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效
.setOutputCameraPath("/CustomPath")// 自定义拍照保存路径,可不填
.enableCrop(false)// 是否裁剪 true or false
.compress(false)// 是否压缩 true or false
// .glideOverride()// int glide 加载宽高,越小图片列表越流畅,但会影响列表图片浏览的清晰度
.withAspectRatio(1, 1)// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
// .hideBottomControls()// 是否显示uCrop工具栏,默认不显示 true or false
// .isGif()// 是否显示gif图片 true or false
.compressSavePath(context.getFilesDir().getAbsolutePath())//压缩图片保存地址
.freeStyleCropEnabled(false)// 裁剪框是否可拖拽 true or false
.circleDimmedLayer(true)// 是否圆形裁剪 true or false
.showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false true or false
.showCropGrid(false)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false true or false
.openClickSound(false)// 是否开启点击声音 true or false
// .selectionMedia()// 是否传入已选图片 List<LocalMedia> list
// .previewEggs()// 预览图片时 是否增强左右滑动图片体验(图片滑动一半即可看到上一张是否选中) true or false
.cropCompressQuality(50)// 裁剪压缩质量 默认90 int
.minimumCompressSize(50)// 小于100kb的图片不压缩
// .synOrAsy(true)//同步true或异步false 压缩 默认同步
// .cropWH()// 裁剪宽高比,设置如果大于图片本身宽高则无效 int
// .rotateEnabled() // 裁剪是否可旋转图片 true or false
.scaleEnabled(true)// 裁剪是否可放大缩小图片 true or false
// .videoQuality()// 视频录制质量 0 or 1 int
// .videoMaxSecond(15)// 显示多少秒以内的视频or音频也可适用 int
// .videoMinSecond(10)// 显示多少秒以内的视频or音频也可适用 int
// .recordVideoSecond()//视频秒数录制 默认60s int
.isDragFrame(false)// 是否可拖动裁剪框(固定)
.forResult(requestCode);//结果回调onActivityResult code
}
示例23
/**
* 打开相册选择
*/
private void openImagePicker() {
int imageCount = this.cameraOptions.getInt("imageCount");
boolean isCamera = this.cameraOptions.getBoolean("isCamera");
boolean isCrop = this.cameraOptions.getBoolean("isCrop");
int CropW = this.cameraOptions.getInt("CropW");
int CropH = this.cameraOptions.getInt("CropH");
boolean isGif = this.cameraOptions.getBoolean("isGif");
boolean showCropCircle = this.cameraOptions.getBoolean("showCropCircle");
boolean showCropFrame = this.cameraOptions.getBoolean("showCropFrame");
boolean showCropGrid = this.cameraOptions.getBoolean("showCropGrid");
boolean compress = this.cameraOptions.getBoolean("compress");
boolean freeStyleCropEnabled = this.cameraOptions.getBoolean("freeStyleCropEnabled");
boolean rotateEnabled = this.cameraOptions.getBoolean("rotateEnabled");
boolean scaleEnabled = this.cameraOptions.getBoolean("scaleEnabled");
int minimumCompressSize = this.cameraOptions.getInt("minimumCompressSize");
int quality = this.cameraOptions.getInt("quality");
boolean isWeChatStyle = this.cameraOptions.getBoolean("isWeChatStyle");
int modeValue;
if (imageCount == 1) {
modeValue = 1;
} else {
modeValue = 2;
}
Boolean isAndroidQ = SdkVersionUtils.checkedAndroid_Q();
Activity currentActivity = getCurrentActivity();
PictureSelector.create(currentActivity)
.openGallery(PictureMimeType.ofImage())//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
.loadImageEngine(GlideEngine.createGlideEngine())
.maxSelectNum(imageCount)// 最大图片选择数量 int
.minSelectNum(0)// 最小选择数量 int
.imageSpanCount(4)// 每行显示个数 int
.selectionMode(modeValue)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
.previewImage(true)// 是否可预览图片 true or false
.previewVideo(false)// 是否可预览视频 true or false
.enablePreviewAudio(false) // 是否可播放音频 true or false
.isCamera(isCamera)// 是否显示拍照按钮 true or false
.imageFormat(isAndroidQ ? PictureMimeType.PNG_Q : PictureMimeType.PNG)// 拍照保存图片格式后缀,默认jpeg
.isZoomAnim(true)// 图片列表点击 缩放效果 默认true
.sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效
.enableCrop(isCrop)// 是否裁剪 true or false
.compress(compress)// 是否压缩 true or false
.glideOverride(160, 160)// int glide 加载宽高,越小图片列表越流畅,但会影响列表图片浏览的清晰度
.withAspectRatio(CropW, CropH)// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
.hideBottomControls(isCrop)// 是否显示uCrop工具栏,默认不显示 true or false
.isGif(isGif)// 是否显示gif图片 true or false
.freeStyleCropEnabled(freeStyleCropEnabled)// 裁剪框是否可拖拽 true or false
.circleDimmedLayer(showCropCircle)// 是否圆形裁剪 true or false
.showCropFrame(showCropFrame)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false true or false
.showCropGrid(showCropGrid)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false true or false
.openClickSound(false)// 是否开启点击声音 true or false
.cropCompressQuality(quality)// 裁剪压缩质量 默认90 int
.minimumCompressSize(minimumCompressSize)// 小于100kb的图片不压缩
.synOrAsy(true)//同步true或异步false 压缩 默认同步
.rotateEnabled(rotateEnabled) // 裁剪是否可旋转图片 true or false
.scaleEnabled(scaleEnabled)// 裁剪是否可放大缩小图片 true or false
.selectionMedia(selectList) // 当前已选中的图片 List
.isWeChatStyle(isWeChatStyle)
.forResult(PictureConfig.CHOOSE_REQUEST); //结果回调onActivityResult code
}
示例24
/**
* 获取选中的资源集合
* <pre>
* 图片、视频、音频选择结果回调
* List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
* <p></p>
* LocalMedia 里面返回三种 path
* 1.media.getPath() 为原图 path
* 2.media.getCutPath() 为裁剪后 path 需判断 media.isCut() 是否为 true 注意: 音视频除外
* 3.media.getCompressPath() 为压缩后 path 需判断 media.isCompressed() 是否为 true 注意: 音视频除外
* 如果裁剪并压缩了, 以取压缩路径为准, 因为是先裁剪后压缩的
* </pre>
* @param data {@link Intent}
* @return {@link List<LocalMedia>}
*/
public static List<LocalMedia> getLocalMedias(final Intent data) {
return (data != null) ? PictureSelector.obtainMultipleResult(data) : null;
}
示例25
/**
* 打开相册拍照
* @param pictureSelector {@link PictureSelector}
* @return {@code true} success, {@code false} fail
*/
public static boolean openCamera(final PictureSelector pictureSelector) {
return openCamera(pictureSelector, PIC_CONFIG);
}
示例26
/**
* 打开相册选择
* @param pictureSelector {@link PictureSelector}
* @return {@code true} success, {@code false} fail
*/
public static boolean openGallery(final PictureSelector pictureSelector) {
return openGallery(pictureSelector, PIC_CONFIG);
}