Android(安卓)图片选择器PictureSelector
16lz
2021-01-24
图片选择器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); }
更多相关文章
- android 开发环境搭建(Windows平台)
- 更改cocos2d-x android 项目的cocos2d-x的版本
- Android(安卓)通过软引用实现图片缓存,防止内存溢出
- Android加载网络图片并保存到系统相册
- android 项目 分享图片到微信
- android获取图片尺寸的两种方法以及bitmap的缩放
- Android(安卓)打电话,发短信,调用系统浏览器
- androidU盘检测
- weex android 选择文件 拍照 获得uri 并转为文件真实路径 转base