Android 图片选择器 PictureSelector

概述

一款针对Android平台下的图片选择器,支持从相册获取图片、视频、音频&拍照,支持裁剪(单图or多图裁剪)、压缩、主题自定义配置等功能,支持动态获取权限&适配Android 5.0+系统的开源图片选择框架。

示例图

使用

首先是在build.gradle里面添加

implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.8'

项目build.gradle里面buildscript、repositories和allprojects、repositories添加

maven { url 'https://jitpack.io' }

添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"    tools:ignore="ProtectedPermissions" /><uses-permission android:name="android.permission.CAMERA"/>

6.0以上需要动态申请权限调用方法

//先定义private static final int REQUEST_EXTERNAL_STORAGE = 1;private static String[] PERMISSIONS_STORAGE = {        "android.permission.READ_EXTERNAL_STORAGE",        "android.permission.WRITE_EXTERNAL_STORAGE",        "android.permission.CAMER"};//然后通过一个函数来申请public static void verifyStoragePermissions(Activity activity) {    try {        //检测是否有写的权限        int permission = ActivityCompat.checkSelfPermission(activity,                "android.permission.WRITE_EXTERNAL_STORAGE");        if (permission != PackageManager.PERMISSION_GRANTED) {            // 没有写的权限,去申请写的权限,会弹出对话框            ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);        }    } catch (Exception e) {        e.printStackTrace();    }}

主要代码

基本使用

PictureSelector.create(this)        .openGallery(PictureConfig.TYPE_IMAGE)        .imageSpanCount(4)// 每行显示个数 int        .maxSelectNum(1)        .selectionMode(PictureConfig.SINGLE)// 多选 or 单选 PictureConfig.MULTIPLE or PictureConfig.SINGLE        .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回        .previewImage(true)// 是否可预览图片 true or false        .isCamera(true)// 是否显示拍照按钮 true or false        .imageFormat(PictureMimeType.JPEG)// 拍照保存图片格式后缀,默认jpeg        .isZoomAnim(true)// 图片列表点击 缩放效果 默认true        .setOutputCameraPath(Const.getImgPath())// 自定义拍照保存路径,可不填        .enableCrop(true)// 是否裁剪 true or false        .compress(true)// 是否压缩 true or false        .compressSavePath(Const.getImgPath())//压缩图片保存地址        .freeStyleCropEnabled(true)// 裁剪框是否可拖拽 true or false        .showCropGrid(true)// 是否显示裁剪矩形网格 圆形裁剪时建议设为false    true or false        .forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code

接收回调

@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (resultCode == -1 && data != null) {        switch (requestCode) {            case PictureConfig.CHOOSE_REQUEST:                List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);                imageView.setImageURI(Uri.parse(selectList.get(0).getCompressPath()));                break;        }    }}

Const.java是拍照图片的保存路径地址

import android.os.Environment;import android.util.Log;import java.io.File;public class Const {    public static String IMG_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "onlineStoreImg";    public static String getImgPath() {        File file = new File(IMG_PATH);        if (!file.exists()) {            boolean mkdirs = file.mkdirs();            if (!mkdirs) {                Log.e("TAG", "文件夹创建失败");                return Environment.DIRECTORY_PICTURES+"/"+"onlineStoreImg";            } else {                Log.e("TAG", "文件夹创建成功");            }        }else {        }        return IMG_PATH;    }}

可选参数

 PictureSelector.create(this)   .openGallery()//相册 媒体类型 PictureMimeType.ofAll()、ofImage()、ofVideo()、ofAudio() //.openCamera()//单独使用相机 媒体类型 PictureMimeType.ofImage()、ofVideo()   .theme()// xml样式配制 R.style.picture_default_style、picture_WeChat_style or 更多参考Demo   .loadImageEngine()// 图片加载引擎 需要 implements ImageEngine接口   .selectionMode()//单选or多选 PictureConfig.SINGLE PictureConfig.MULTIPLE   .isPageStrategy()//开启分页模式,默认开启另提供两个参数;pageSize每页总数;isFilterInvalidFile是否过滤损坏图片   .isSingleDirectReturn()//PictureConfig.SINGLE模式下是否直接返回   .isWeChatStyle()//开启R.style.picture_WeChat_style样式   .setPictureStyle()//动态自定义相册主题   .setPictureCropStyle()//动态自定义裁剪主题   .setPictureWindowAnimationStyle()//相册启动退出动画   .isCamera()//列表是否显示拍照按钮   .isZoomAnim()//图片选择缩放效果   .imageFormat()//拍照图片格式后缀,默认jpeg, PictureMimeType.PNG,Android Q使用PictureMimeType.PNG_Q   .maxSelectNum()//最大选择数量,默认9张   .minSelectNum()// 最小选择数量   .maxVideoSelectNum()//视频最大选择数量   .minVideoSelectNum()//视频最小选择数量   .videoMaxSecond()// 查询多少秒以内的视频   .videoMinSecond()// 查询多少秒以内的视频   .imageSpanCount()//列表每行显示个数   .openClickSound()//是否开启点击声音   .selectionMedia()//是否传入已选图片   .recordVideoSecond()//录制视频秒数 默认60s   .previewEggs()//预览图片时是否增强左右滑动图片体验   .cropCompressQuality()// 注:已废弃 改用cutOutQuality()   .isGif()//是否显示gif   .previewImage()//是否预览图片   .previewVideo()//是否预览视频   .enablePreviewAudio()//是否预览音频   .enableCrop()//是否开启裁剪   .cropWH()// 裁剪宽高比,已废弃,改用. cropImageWideHigh()方法   .cropImageWideHigh()// 裁剪宽高比,设置如果大于图片本身宽高则无效   .withAspectRatio()//裁剪比例   .cutOutQuality()// 裁剪输出质量 默认100   .freeStyleCropEnabled()//裁剪框是否可拖拽   .circleDimmedLayer()// 是否开启圆形裁剪   .setCircleDimmedColor()//设置圆形裁剪背景色值   .setCircleDimmedBorderColor()//设置圆形裁剪边框色值   .setCircleStrokeWidth()//设置圆形裁剪边框粗细   .showCropFrame()// 是否显示裁剪矩形边框 圆形裁剪时建议设为false   .showCropGrid()//是否显示裁剪矩形网格 圆形裁剪时建议设为false   .rotateEnabled()//裁剪是否可旋转图片   .scaleEnabled()//裁剪是否可放大缩小图片   .isDragFrame()//是否可拖动裁剪框(固定)   .hideBottomControls()//显示底部uCrop工具栏   .basicUCropConfig()//对外提供ucrop所有的配制项   .compress()//是否压缩   .compressFocusAlpha()//压缩后是否保持图片的透明通道   .minimumCompressSize()// 小于多少kb的图片不压缩   .videoQuality()//视频录制质量 0 or 1   .compressQuality()//图片压缩后输出质量   .synOrAsy()//开启同步or异步压缩   .queryMaxFileSize()//查询指定大小内的图片、视频、音频大小,单位M   .compressSavePath()//自定义压缩图片保存地址,注意Q版本下的适配   .sizeMultiplier()//glide加载大小,已废弃   .glideOverride()//glide加载宽高,已废弃   .isMultipleSkipCrop()//多图裁剪是否支持跳过   .isMultipleRecyclerAnimation()// 多图裁剪底部列表显示动画效果   .querySpecifiedFormatSuffix()//只查询指定后缀的资源,PictureMimeType.ofJPEG() ...   .isReturnEmpty()//未选择数据时按确定是否可以退出   .isAndroidQTransform()//Android Q版本下是否需要拷贝文件至应用沙盒内   .setRequestedOrientation()//屏幕旋转方向 ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED ...   .isOriginalImageControl()//开启原图选项   .bindCustomPlayVideoCallback()//自定义视频播放拦截   .bindCustomCameraInterfaceListener()//自定义拍照回调接口   .cameraFileName()//自定义拍照文件名,如果是相册内拍照则内部会自动拼上当前时间戳防止重复   .renameCompressFile()//自定义压缩文件名,多张压缩情况下内部会自动拼上当前时间戳防止重复   .renameCropFileName()//自定义裁剪文件名,多张裁剪情况下内部会自动拼上当前时间戳防止重复   .setRecyclerAnimationMode()//列表动画效果,AnimationType.ALPHA_IN_ANIMATION、SLIDE_IN_BOTTOM_ANIMATION   .isUseCustomCamera()// 开启自定义相机   .setButtonFeatures()// 自定义相机按钮状态,CustomCameraView.BUTTON_STATE_BOTH   .setLanguage()//国际化语言 LanguageConfig.CHINESE、ENGLISH、JAPAN等   .isWithVideoImage()//图片和视频是否可以同选,只在ofAll模式下有效   .isMaxSelectEnabledMask()//选择条件达到阀时列表是否启用蒙层效果   .isAutomaticTitleRecyclerTop()//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部   .loadCacheResourcesCallback()//获取ImageEngine缓存图片,参考Demo   .setOutputCameraPath()// 自定义相机输出目录只针对Android Q以下版本,具体参考Demo   .forResult();//结果回调分两种方式onActivityResult()和OnResultCallbackListener方式

更多相关文章

  1. android editText 插入表情,或者是图片
  2. 浅谈android的selector,背景选择器
  3. android之调用webservice 实现图片上传
  4. android 按钮设计中state_selected属性
  5. Android(安卓)保存 JNI 层 opencv cvMat 图片
  6. Android高效加载大图、多图解决方案,有效避免程序OOM
  7. 重写Button实现图片drawableTop和文字一起居中
  8. Android(安卓)ImageButton简介
  9. Android中的文本框,图片以及点击事件的设置

随机推荐

  1. EasyUI-datagrid表格(基本使用)
  2. bootstrap入门【按钮式下拉菜单,输入框组
  3. JavaScript 函数柯里化(参考《JavaScript
  4. 如何在WKWebview上监控请求?
  5. bootstrap弹出框的实现
  6. 在AngularJS中轻松控制dom - 单击按钮,然
  7. 【JavaScript 5—基础知识点】:正则表达式
  8. swiper 定位到指定页面或位置
  9. Redux-saga停留在收益率调用上
  10. 如何在JavaScript中按大写和小写分割字符