图片选择器

作者: 奔跑的图腾 | 来源:发表于2018-03-10 09:55 被阅读132次

    一款在github上针对android平台下的图片选择器,支持从相册或拍照选择图片或视频、音频,支持动态权限获取、裁剪(单图or多图裁剪)、压缩、主题自定义配置等功能、适配android 6.0+系统的开源图片选择框架
    https://github.com/LuckSiege/PictureSelector

    dependencies {
        compile 'com.github.LuckSiege.PictureSelector:picture_library:v2.1.7'
    }
    

    glide冲突
    由于PictureSelector 2.0引入的是最新的glide 4.0.0,所以将项目中老版本的glide删除,并且将报错代码换成如下写法:

    RequestOptions options = new RequestOptions();
    options.placeholder(R.drawable.image);
    Glide.with(context).load(url).apply(options).into(imageView);
    

    // 进入相册 以下是例子:用不到的api可以不写

    PictureSelector.create(MainActivity.this)
        .openGallery()//全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
        .theme()//主题样式(不设置为默认样式) 也可参考demo values/styles下 例如:R.style.picture.white.style
        .maxSelectNum()// 最大图片选择数量 int
        .minSelectNum()// 最小选择数量 int
        .imageSpanCount(4)// 每行显示个数 int
        .selectionMode()// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE
        .previewImage()// 是否可预览图片 true or false
        .previewVideo()// 是否可预览视频 true or false
        .enablePreviewAudio() // 是否可播放音频 true or false
        .isCamera()// 是否显示拍照按钮 true or false
        .imageFormat(PictureMimeType.PNG)// 拍照保存图片格式后缀,默认jpeg
        .isZoomAnim(true)// 图片列表点击 缩放效果 默认true
        .sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .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工具栏,默认不显示 true or false
        .isGif()// 是否显示gif图片 true or false
        .compressSavePath(getPath())//压缩图片保存地址
        .freeStyleCropEnabled()// 裁剪框是否可拖拽 true or false
        .circleDimmedLayer()// 是否圆形裁剪 true or false
        .showCropFrame()// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   true or false
        .showCropGrid()// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false
        .openClickSound()// 是否开启点击声音 true or false
        .selectionMedia()// 是否传入已选图片 List<LocalMedia> list
        .previewEggs()// 预览图片时 是否增强左右滑动图片体验(图片滑动一半即可看到上一张是否选中) true or false
        .cropCompressQuality()// 裁剪压缩质量 默认90 int
        .minimumCompressSize(100)// 小于100kb的图片不压缩
        .synOrAsy(true)//同步true或异步false 压缩 默认同步
        .cropWH()// 裁剪宽高比,设置如果大于图片本身宽高则无效 int
        .rotateEnabled() // 裁剪是否可旋转图片 true or false
        .scaleEnabled()// 裁剪是否可放大缩小图片 true or false
        .videoQuality()// 视频录制质量 0 or 1 int
        .videoMaxSecond(15)// 显示多少秒以内的视频or音频也可适用 int
            .videoMinSecond(10)// 显示多少秒以内的视频or音频也可适用 int
        .recordVideoSecond()//视频秒数录制 默认60s int
        .forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code
    

    清除缓存
    //包括裁剪和压缩后的缓存,要在上传成功后调用,注意:需要系统sd卡权限

    PictureFileUtils.deleteCacheDirFile(MainActivity.this);
    

    启动相册并拍照

    PictureSelector.create(MainActivity.this)
           .openGallery(PictureMimeType.ofImage())
           .forResult(PictureConfig.CHOOSE_REQUEST);
    

    单独启动拍照或视频 根据PictureMimeType自动识别

    PictureSelector.create(MainActivity.this)
           .openCamera(PictureMimeType.ofImage())
           .forResult(PictureConfig.CHOOSE_REQUEST);
    

    预览图片
    // 预览图片 可自定长按保存路径

    PictureSelector.create(MainActivity.this).externalPicturePreview(position, "/custom_file", selectList);
    PictureSelector.create(MainActivity.this).externalPicturePreview(position, selectList);
    

    预览视频

    PictureSelector.create(MainActivity.this).externalPictureVideo(video_path);
    

    结果回调

    @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();是否为true
                        // 3.media.getCompressPath();为压缩后path,需判断media.isCompressed();是否为true
                        // 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
                        adapter.setList(selectList);
                        adapter.notifyDataSetChanged();
                        break;
                }
            }
        }
    

    相关文章

      网友评论

        本文标题:图片选择器

        本文链接:https://www.haomeiwen.com/subject/bjhpfftx.html