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);
}