Skip to content

1、图库选图或视频,可多选,单选,可选完图片后进行裁剪,2、查看网络大图(自动识别是否为超长图),并可以保存到手机图库,3、适配沉浸式状态栏,4、Glide加载,5、可下拉关闭查看大图界面

Notifications You must be signed in to change notification settings

Awent/PhotoUtil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
lijinshao
Oct 27, 2023
a8aeafd · Oct 27, 2023

History

28 Commits
Sep 24, 2021
Sep 25, 2020
Sep 17, 2020
Oct 27, 2023
Sep 17, 2020
Sep 17, 2020
Sep 24, 2021
Sep 17, 2020
Sep 17, 2020
Sep 26, 2021
Sep 24, 2021
Sep 17, 2020
Sep 17, 2020
Sep 17, 2020
Sep 24, 2021
Sep 17, 2020

Repository files navigation

PhotoUtil (仅支持AndroidX,本项目已适配Android Q)

1、图库选图或视频,可多选,单选,可选完图片后进行裁剪,2、查看网络大图(自动识别是否为超长图),并可以保存到手机图库,3、适配沉浸式状态栏,4、Glide加载

demo-apk下载

下面来看几张效果图:

image

image

image

image

下面讲解如何导入到你的项目中

1、在你的root gradle(也就是项目最外层的gradle)添加如下代码


allprojects {
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}

2、然后在module gradle dependencies 添加以下依赖,如有重复,自行删除重复的依赖

    implementation "androidx.appcompat:appcompat:1.2.0"
    implementation "androidx.recyclerview:recyclerview:1.2.1"
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation "androidx.legacy:legacy-support-v4:1.0.0"
    //跟随viewpager的点
    implementation 'me.relex:circleindicator:1.1.8@aar'
    //上滑控制面板,项目中的potopick中有使用案例
    implementation 'com.sothree.slidinguppanel:library:3.3.0'
    //android6.0权限工具类
    implementation 'com.lovedise:permissiongen:0.1.1'
    //加载超长图必备库
    implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.10.0'
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
    //使用okhttp拦截器进行图片加载进度监听
    implementation 'com.github.bumptech.glide:okhttp3-integration:4.10.0'
    //解决Glide找不到Android声明库问题
    annotationProcessor 'androidx.annotation:annotation:1.2.0'
    implementation 'com.github.chrisbanes:PhotoView:2.3.0'
    //图库
    implementation 'com.github.Awent:PhotoUtil:v1.0.8'

下面讲解如何使用(可进行动态设置参数,不用的可以不设置)

  • 图库
PhotoUtil.pick(this)
    .pickModeMulti()                            //多选
    .pickModeSingle()                           //单选
    .onlyImage()                                //只显示图片,不包含视频,默认是图片跟视频都展示,如果showCamera(true),只会启动系统拍照,并返回图片路径
    .onlyVideo()                                //只显示视频,不包含图片,默认是图片跟视频都展示,如果showCamera(true),只会启动系统视频录制,并返回视频路径
    .maxPickSize(15)                            //最多可选15张
    .showCamera(false)                          //是否展示拍照icon,默认展示
    .clipPhoto()                                //是否选完图片进行图片裁剪,默认是false,如果这里设置成true,就算设置了是多选也会被配置成单选
    .clipPhotoWithSystem()                      //是否选完图片进行图片裁剪,默认是false,如果这里设置成true,就算设置了是多选也会被配置成单选,这里调用的是系统裁剪功能
    .spanCount(4)                               //图库的列数,默认3列,这个数建议不要太大
    .showGif(true)//default true                //是否展示gif
    .setToolbarBackGround(@ColorRes int toolbarBackGroundId) //设置toolbar颜色
    .setOnPhotoResultCallback(OnPhotoResultCallback onPhotoResultCallback) //设置数据回调,如果不想在Activity通过onActivityResult()获取回传的数据,可实现此接口
    .build();

  • 获取图库选择了(或裁剪好)的图片地址
PhotoUtil.pick(this)
    .pickModeMulti()
    .maxPickSize(15)
    .showCamera(true)
    .setOriginalPicture(true)//让用户可以选择原图
    .setOnPhotoResultCallback(new OnPhotoResultCallback() {
          @Override
          public void onResult(PhotoResultBean result) {
                 Log.e("MainActivity", "result = " + result.getPhotoLists().size());
          }
    })
    .build();

  • 查看网络大图
PhotoUtil.browser(this, Class<T> t)
    .fromList(Iterable<? extends T> iterable, OnItemCallBack<T> listener)//接收集合数据并提供内循环返回所有item
    .fromMap(Map<?, T> map, OnItemCallBack<T> listener)                  //接收集合数据并提供内循环返回所有item
    .setBigImageUrls(ImageProvider.getImageUrls())      //大图片url,可以是sd卡res,asset,网络图片.
    .setSmallImageUrls(ArrayList<String> smallImgUrls)  //小图图片的url,用于大图展示前展示的
    .addSingleBigImageUrl(String bigImageUrl)           //一张一张大图add进ArrayList
    .addSingleSmallImageUrl(String smallImageUrl)       //一张一张小图add进ArrayList
    .setSaveImage(true)                                 //开启保存图片,默认false
    .setPosition(2)                                     //默认展示第2张图片
    .setSaveImageLocalPath("Android/SD/xxx/xxx")        //这里是你想保存大图片到手机的地址,可在手机图库看到,不传会有默认地址,android Q会忽略此参数
    .setBundle(bundle)                                  //传递自己的数据,如果数据中包含java bean,必须实现Parcelable接口
    .setOpenDownAnimate(false)                          //是否开启下滑关闭activity,默认开启。类似微信的图片浏览,可下滑关闭一样
    .setOnPhotoSaveCallback(new OnPhotoSaveCallback()   //保存网络图片到本地图库的回调,保存成功则返回本地图片路径,失败返回null
    .error(@DrawableRes int resourceId)                 //网络图片加载失败时显示的错误图片,不传会有默认的
    .build();
    
自定义界面,详细自定义用法参考demo:

PhotoUtil.browserCustom(this,Class<?> clazz)       //这里传入你自定义的Activity class,自定义的activity必须继承PhotoPagerActivity
    ...
    ...
    ...
    .build();
  • 单独调用相机进行拍照、拍照后图片裁剪,或视频录制

PhotoUtil.camera(this)          //‘this’必须是extends FragmentActivity
         .takeImage()           //拍照
         .takeVideo()           //视频录像
         .setVideoMaxSize(long) //最大视频大小
         .setVideoDuration(long)//视频时长,很多国产机中这个参数无效
         .clipPhoto()           //调用当前lib图片裁剪
         .clipPhotoWithSystem() //调用系统图片裁剪
         .setAspectX(1)         //裁剪框 X 比值
         .setAspectY(1)         //裁剪框 Y 比值
         .setOutputX(400)       //裁剪后输出宽度
         .setOutputY(400)       //裁剪后输出高度
         .setOnPhotoResultCallback(new OnPhotoResultCallback() {
                @Override
                public void onResult(@NonNull PhotoResultBean result) {
                       //do something
                       startAc(result.getList());
                }
          })
         .build();
  • 开发中常用的查看网络大图fromListfromMap用法介绍

    1、使用场景: 图片url存在于集合实体类里,例如:Map<Integer, UserBean.User>List<UserBean.User> userList, 这时候不需要自己循环这些集合取出图片url了,本方法会提供内部循环,你只需关注你的图片url字段就行

    2、使用示例:用户头像avatar存在于User实体类里面,是通过服务器返回来的

List<UserBean.User> list = getUserInfo();           //使用fromList
or
Map<Integer, UserBean.User> map = new HashMap<>();  //使用fromMap

java写法:
            PhotoUtil.browser(this, UserBean.User.class)
                        .fromList(list, new OnItemCallBack<UserBean.User>() {
                            @Override
                            public void nextItem(UserBean.User item, PhotoPagerConfig.Builder<UserBean.User> builder) {
                                builder.addSingleBigImageUrl(item.getAvatar());
                            }
                        })
                        .setOnPhotoSaveCallback(new OnPhotoSaveCallback() {
                            @Override
                            public void onSaveImageResult(String localFilePath) {
                                Toast(localFilePath != null ? "保存成功" : "保存失败");
                            }
                        })
                        .build();
                                  
                                  
kotlin写法:
              list?.let {
                PhotoUtil.browser(this, UserBean.User::class.java)
                        .fromList(it) { item, builder ->
                            builder.addSingleBigImageUrl(item.avatar)//这个avatar就是你需要关注的字段,在这里设置进去即可
                        }.build()
              }
                                  

注意事项:

如果自定义activity(必须继承PhotoPagerActivity)开启了下滑关闭功能,记得自定义activityTheme要引用{@style/PhoAppTheme.Transparent}

  • 例子如下:
<activity
           android:theme="@style/PhoAppTheme.Transparent"
           android:name=".activity.CustomPhotoPageActivity"/>
  • 混淆
参考simple中的proguard-rules文件

更多使用方法参考点这里

PhotoUtil

Glide图片加载进度参考

v1.0.8:

implementation 'com.github.Awent:PhotoUtil:v1.0.8'

经过我测试,如果targetSdkVersion >= 29,以uri的方式加载本地图片,速度会非常慢,所以想要加载快,没那么多问题,最好你们app最好改为:targetSdkVersion = 28

v1.0.7:

implementation 'com.github.Awent:PhotoUtil:v1.0.7'

优化单独调用相机时权限请求和新增更多示例

v1.0.6:

implementation 'com.github.Awent:PhotoUtil:v1.0.6'

新增:单独调用相机,可拍照,拍照后裁剪,视频录像

v1.0.5:

implementation 'com.github.Awent:PhotoUtil:v1.0.5'

v1.0.2:

implementation 'com.github.Awent:PhotoUtil:v1.0.2'

About

1、图库选图或视频,可多选,单选,可选完图片后进行裁剪,2、查看网络大图(自动识别是否为超长图),并可以保存到手机图库,3、适配沉浸式状态栏,4、Glide加载,5、可下拉关闭查看大图界面

Topics

Resources

Stars

Watchers

Forks