图片选择器ImagePicker

ImagePicker是一个Android版本的图片视频选择组件。
GitHub仓库地址

引入

gradle

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

implementation 'com.github.DL-ZhangTeng:ImagePicker:1.5.0'
//使用的三方
implementation 'com.github.bumptech.glide:glide:4.12.0'
implementation 'com.yalantis:ucrop:2.2.0'
implementation 'com.github.DL-ZhangTeng:RequestPermission:1.3.0'
implementation 'com.github.DL-ZhangTeng:Utils:2.2.0'

效果图

android imageView 裁剪 android imagepicker_android


android imageView 裁剪 android imagepicker_组件_02


android imageView 裁剪 android imagepicker_图片选择_03

属性

属性名

描述

multiSelect

是否单选,默认true

maxImageSelectable

多选时最多选多少张,默认9

maxVideoSelectable

多选时最多选多少个,默认1

isShowCamera

是否在第一格显示拍照录制,默认true

filePath

图片剪裁保持地址,默认"/" + BuildConfig.APPLICATION_ID + “/imagePicker/ImagePickerPictures”

provider

文件提供者,默认BuildConfig.APPLICATION_ID + “.FileProvider”

pathList

图片保持List

isVideoPicker

是否可选择视频,默认true

isImagePicker

是否可选择图片,默认true

isMirror

摄像拍照是否镜像

maxWidth

最大图片宽度,默认1920

maxHeight

最大图片高度,默认1920

maxImageSize

图片大小,默认15M

maxVideoLength

视频长度,默认15000ms

maxVideoSize

视频大小,默认45M

imagePickerType

弹出类型,默认图片选择器

isCrop

是否开启剪裁,默认false

cropAspectRatio

剪裁比率(w/h),默认0

pickerThemeColorRes

选择器主题色

cropThemeColorRes

剪裁器主题色

pickerTitleColorRes

选择器标题色

cropTitleColorRes

剪裁器标题色

pickerBackRes

选择器返回按钮

pickerFolderRes

选择器文件夹选择下拉图标

使用

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder()
                .provider(getPackageName() + ".FileProvider")
                .imageLoader(new GlideImageLoader()) //图片加载器
                .iHandlerCallBack(new HandlerCallBack())    //图片选择器生命周期监听(直接打开摄像头时无效)
                .multiSelect(true)                 //是否多选
                .isShowCamera(true)
                .isVideoPicker(true)              //是否选择视频 默认false
                .isImagePicker(true)
                .imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型
                .isMirror(false)                              //是否旋转镜头
                .maxImageSelectable(9)                        //图片可选择数
                .maxHeight(1920)                              //图片最大高度
                .maxWidth(1920)                               //图片最大宽度
                .maxImageSize(15)                             //图片最大大小Mb
                .maxVideoLength(5 * 1000)
                .maxVideoSize(180)
                .isCrop(true)
                .pathList(new ArrayList<>())
                .pickerThemeColorRes(R.color.image_picker_white)
                .pickerTitleColorRes(R.color.image_picker_text_black)
                .cropThemeColorRes(R.color.image_picker_white)
                .cropTitleColorRes(R.color.image_picker_text_black)
                .pickerBackRes(R.mipmap.image_picker_back_black)
                .pickerFolderRes(R.mipmap.image_picker_folder_black)
                .build();

        findViewById(R.id.iv).setOnClickListener(v -> {
//            imagePickerConfig.getPathList().clear();
            ImagePickerOpen.getInstance()
                    .setImagePickerConfig(imagePickerConfig)
                    .pathList(new ArrayList<>())
                    .open(this, 100);
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 100 && data != null) {
            List<String> paths = ImagePickerOpen.getResultData(this, resultCode, data);
            ImagePickerOpen.getInstance().getImagePickerConfig().getImageLoader().loadImage(this, findViewById(R.id.iv), paths.get(0));
        }
    }
}
public class HandlerCallBack implements IHandlerCallBack<ImageInfo> {
    private String TAG = "---ImagePicker---";
    List<ImageInfo> photoList = new ArrayList<>();

    @Override
    public void onStart() {
        Log.i(TAG, "onStart: 开启");
    }

    @Override
    public void onSuccess(List<ImageInfo> photoList) {
        this.photoList = photoList;
        Log.i(TAG, "onSuccess: 返回数据");
    }

    @Override
    public void onCancel() {
        Log.i(TAG, "onCancel: 取消");
    }

    @Override
    public void onFinish(List<ImageInfo> selectImage) {

    }

    @Override
    public void onError() {
        Log.i(TAG, "onError: 出错");
    }
}

混淆

-keep public class com.zhangteng.**.*{ *; }

历史版本

版本

更新

更新时间

v1.5.0

权限请求被拒绝再次请求权限跳转设置页面

2023/5/3 at 20:27

v1.4.2

Android11的存储写入权限拒绝结果过滤

2023/2/14 at 0:27

v1.4.1

使用210工具库

2023/1/13 at 23:48

v1.4.0

使用独立的Utils库

2022/9/2 at 20:39

v1.3.1

继承Utils库中的接口

2022/7/5 at 9:21

v1.3.0

使用base的utils库

2022/1/21 at 15:42

v1.2.0

常量名&值更换

2022/1/5 at 23:42

v1.1.9

修改依赖库&选择图片回调

2022/01/02 at 21:55

v1.1.8

开放openNoPermission方法,更新权限请求库版本

2021/11/18 at 15:44

v1.1.7

图片视频存储地址修改为公共媒体地址(targetSdkVersion 29+时在Android10+有文件访问限制)

2021/7/1 at 11:24

v1.1.6

1.放弃非AndroidX维护;2.增加默认选中图片集合;3.使用jitpack仓库

2021/6/7 at 13:35

v1.0.10/v1.1.5

1.照片存储空间修改到Android/data/${applicationId}/files/imagePicker文件夹下;2.更新权限请求库版本

2021/2/5 at 15:49

v1.0.9/v1.1.4

处理部分机型未释放相机bug&忽略目标版本为29时的分区存储

2020/8/24 at 13:58

v1.0.8/v1.1.3

增加文件夹选择下拉图标

2020/8/21 at 10:50

v1.0.7/v1.1.2

根据使用功能动态请求权限

2020/8/18 0018 at 上午 10:50

v1.0.6/v1.1.1

修复请求权限失败时崩溃bug

2020/8/17 0017 at 下午 17:31

v1.1.0

迁移到androidx

2020/7/22 0022 at 上午 11:54

v1.0.5

多媒体查找逻辑调整

2020/6/17 0017 at 下午 17:37

v1.0.4

视频做最大限制(显示的最大视频长度和录制的最大长度一致)

2020/6/2 0002 at 上午 11:00

v1.0.3

imageInfo实现Parcelable接口

2020/5/27 0027 at 下午 14:39

v1.0.2

更全的样式自定义

2020/5/20 0020 at 下午 17:13

v1.0.0

初版

2020/5/15 0015 at 下午 16:14

赞赏

如果您喜欢ImagePicker,或感觉ImagePicker帮助到了您,可以 支持一下,您的支持就是我的动力,谢谢