图片选择器PictureSelector

https://github.com/LuckSiege/PictureSelector

添加依赖

api 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'

添加权限

  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.CAMERA" />

设置拍照路径
meta-data设置指定的Uri共享路径,并引用@xml/file_path资源

        <provider            android:name="android.support.v4.content.FileProvider"            android:authorities="${applicationId}.provider"            android:exported="false"            android:grantUriPermissions="true">            <meta-data                android:name="android.support.FILE_PROVIDER_PATHS"                android:resource="@xml/file_paths" />        </provider>

@xml/file_paths 中 external-path用来指定Uri共享的
name属性的值可以随便填
path属性的值表示共享的具体路径,这里设置为空代表将整个SD卡进行共享,当然你也可以共享存放的图片地址

<resources>    <paths>        <external-path            name="camera_photos"            path="" />    </paths></resources>

功能配置

// 进入相册 以下是例子:用不到的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 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.isDragFrame(false)// 是否可拖动裁剪框(固定) .forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code     

代码

iv_headPortrait.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                PictureSelector.create(PersonalDataActivity.this)                        .openGallery(PictureMimeType.ofImage())                        .minSelectNum(1)                        .previewImage(false)// 是否可预览图片                        .selectionMode(PictureConfig.SINGLE)// 多选 or 单选PictureConfig.MULTIPLE : PictureConfig.SINGLE                        .isCamera(true)// 是否显示拍照按钮                        .enableCrop(false)// 是否裁剪                        .compress(true)// 是否压缩                        //.sizeMultiplier(0.5f)// glide 加载图片大小 0~1之间 如设置 .glideOverride()无效                        .glideOverride(160, 160)// glide 加载宽高,越小图片列表越流畅,但会影响列表图片浏览的清晰度                        .withAspectRatio(1, 1)// 裁剪比例 如16:9 3:2 3:4 1:1 可自定义                        .rotateEnabled(false) // 裁剪是否可旋转图片                        .forResult(REQUEST_CAMERA_CODE_IMG);            }        });

结果回调

   @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        List<LocalMedia> images;        switch (requestCode) {            case REQUEST_CAMERA_CODE_IMG:                if (resultCode == RESULT_OK) {                    images = PictureSelector.obtainMultipleResult(data);                    LocalMedia media = images.get(0);                    imagePhat = media.getPath();                    LogUtil.i(TAG, "图片路径" + imagePhat);                    mediaImg(PersonalDataActivity.this, media, iv_headPortrait);                    postUploadFile(imagePhat,userid);                }                break;        }    }

这里进行图片压缩和显示图片

private void mediaImg(Activity activity, LocalMedia media, ImageView imageView) {        int mimeType = media.getMimeType();        String path = "";        if (media.isCut() && !media.isCompressed()) {            // 裁剪过            path = media.getCutPath();        } else if (media.isCompressed() || (media.isCut() && media.isCompressed())) {            // 压缩过,或者裁剪同时压缩过,以最终压缩过图片为准            path = media.getCompressPath();        } else {            // 原图            path = media.getPath();        }        // 图片        if (media.isCompressed()) {            Log.i("compress image result:", new File(media.getCompressPath()).length() / 1024 + "k");            Log.i("压缩地址::", media.getCompressPath());        }        Log.i("原图地址::", media.getPath());        int pictureType = PictureMimeType.isPictureType(media.getPictureType());        if (media.isCut()) {            Log.i("裁剪地址::", media.getCutPath());        }        long duration = media.getDuration();        RequestOptions options = new RequestOptions()                .centerCrop()                .placeholder(R.color.white)                .diskCacheStrategy(DiskCacheStrategy.ALL);        Glide.with(activity)                .load(path)                .apply(options)                .into(imageView);    }

更多相关文章

  1. android 开发环境搭建(Windows平台)
  2. 更改cocos2d-x android 项目的cocos2d-x的版本
  3. Android(安卓)通过软引用实现图片缓存,防止内存溢出
  4. Android加载网络图片并保存到系统相册
  5. android 项目 分享图片到微信
  6. android获取图片尺寸的两种方法以及bitmap的缩放
  7. Android(安卓)打电话,发短信,调用系统浏览器
  8. androidU盘检测
  9. weex android 选择文件 拍照 获得uri 并转为文件真实路径 转base

随机推荐

  1. Android(安卓)kernel printk打印级别
  2. Android(安卓)Studio - Session 'app': E
  3. android修改进入工程模式
  4. Android获取基站坐标代码
  5. android manifest相关属性
  6. Android中的Handler的使用
  7. Android图片放大修改代码
  8. Android之AIDL
  9. Android(安卓)解决 RecyclerView 嵌套 Sc
  10. Android(安卓)响应键盘移动图标