Skip to content

02 相机与相册

桓谭生 edited this page Nov 2, 2021 · 28 revisions

启动API

  • 预加载:
    EasyPhotos.preLoad(Context cxt)//预加载,写不写都行。第一次扫描可能会慢,建议在app主页面或调用EasyPhotos的上一页做一次预加载,若未授权读取权限该功能失效但不影响程序使用

  • 创建相机:
    EasyPhotos.createCamera(Context cxt,boolean useWidth)//参数说明:上下文,是否使用宽高数据(false时宽高数据为0,扫描速度更快)

  • 创建相册:
    EasyPhotos.createAlbum(Context cxt,boolean isShowCamera,boolean useWidth, @NonNull ImageEngine imageEngine)//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),图片加载引擎实现(ImageEngine说明)

  • 配置FileProvider字符串:
    setFileProviderAuthority("com.huantansheng.easyphotos.sample.fileprovider")//参数说明:见下方FileProvider的配置

  • 设置选择数:
    setCount(int count)//参数说明:最大可选数,默认1

  • 复杂选择器配置,同时选择视频和图片时,对视频和图片的选择数量进行不同配置,也可以根据用户选择的文件来进行可选择类型限制:
    complexSelector(boolean singleType,int videoCount,int pictureCount)//参数说明:singleType为是否只能选择一种文件类型,如用户选择视频后不可以选择图片,若false则可以同时选择。后面两个参数为视频和图片各自类型的最大选择数。

  • 设置显示照片的最小文件大小:
    setMinFileSize(1024*10)//参数说明:最小文件大小,单位Bytes

  • 设置显示照片的最小宽度:
    setMinWidth(500)//参数说明:显示照片的最小宽度,单位Px

  • 设置显示照片的最小高度:
    setMinHeight(500)//参数说明:显示照片的最小高度,单位Px

  • 设置是否显示Gif动图:
    setGif(false)//参数说明:相册中是否显示Gif动图。默认不显示,boolean类型。

  • 设置是否显示视频:
    setVideo(false)//参数说明:相册中是否显示视频。默认不显示,boolean类型。

  • 过滤掉小于多少时长的视频:
    setVideoMinSecond(int second)

  • 过滤掉大于多少时长的视频:
    setVideoMaxSecond(int second)

  • 设置只显示某种类型的文件:
    filter(String... types)//支持Type.GIF和Type.VIDEO,前提是已经选择显示了gif和video

  • 设置默认选择图片集合方式一:
    setSelectedPhotos(mSelectedPhotos)//参数说明:用户上一次勾选过的图片集合,ArrayList<Photo>类型
    setSelectedPhotos(mSelectedPhotos,false)//参数说明:用户上一次勾选过的图片集合,ArrayList<Photo>类型;不按照上次选择顺序显示

  • 设置默认选择图片集合方式二:
    setSelectedPhotoPaths(selectedPhotoPathList)//参数说明:用户上一次勾选过的图片地址集合,ArrayList<String>类型
    setSelectedPhotoPaths(selectedPhotoPathList,false)//参数说明:用户上一次勾选过的图片地址集合,ArrayList<String>类型;不按照上次选择顺序显示

  • 设置原图按钮:
    setOriginalMenu(isChecked, isVip, "该功能为VIP会员特权功能")//参数说明:是否默认选中,是否可用,不可用时用户点击将toast信息。不执行该方法则不显示原图按钮。是否默认选中可以根据EasyPhotos的回调走,回调中会给出用户上一次是否选择了原图选项的标识

  • 设置是否显示拼图按钮:
    setPuzzleMenu(shouldShow)//参数说明:是否显示。默认是显示的。

  • 设置是否显示清空按钮:
    setCleanMenu(shouldShow)//参数说明:是否显示。默认是显示的。

  • 设置是否显示相册页底部中间的编辑按钮
    当清空按钮、原图按钮、拼图按钮都不显示时,编辑按钮自动隐藏。其余条件均显示。

  • 设置广告:
    setAdView(photosAdView, photosAdIsLoaded, albumItemsAdView, albumItemsAdIsLoaded)//参数说明:相册中的广告view,相册中的广告View数据是否绑定完毕,专辑列表广告View,专辑列表广告View数据是否绑定完毕。不执行该方法则不使用广告填充功能。广告view可以传空,适用于VIP不显示广告场景

  • 刷新图片列表广告数据:
    EasyPhotos.notifyPhotosAdLoaded()

  • 刷新专辑项目列表广告:
    EasyPhotos.notifyAlbumItemsAdLoaded()

  • 设置相机按钮位置:
    setCameraLocation(@Setting.Location int cLocation)//默认左下角,通过设置可设置为相册第一张图片的位置

  • 启动相机或相册:
    start(requestCode);

  • 新的启动相机或相册,通过接口获取回调数据:
    start(SelectCallback callback)

  • 图片最小文件大小、图片最小宽度、图片最小高度,如果单一设置,满足条件即过滤,如果多项设置,满足一项即过滤

(如果使用广告模式,建议下载示例代码查看SampleActivity中的具体实现)


  • 单独使用相机
EasyPhotos.createCamera(this,false)//参数说明:上下文,是否使用宽高数据(false时宽高数据为0,扫描速度更快) 
          .setFileProviderAuthority("com.huantansheng.easyphotos.sample.fileprovider")//参数说明:见下方`FileProvider的配置`
          .start(requestCode);  
  • 相册单选,无相机功能
EasyPhotos.createAlbum(this, false,true, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .start(requestCode);
  • 相册多选,无相机功能
EasyPhotos.createAlbum(this, false,false, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setCount(9)//参数说明:最大可选数,默认1
          .start(requestCode);
  • 相册单选,有相机功能
EasyPhotos.createAlbum(this, true,false, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setFileProviderAuthority("com.huantansheng.easyphotos.sample.fileprovider")//参数说明:见下方`FileProvider的配置`
          .start(requestCode);
  • 相册多选,有相机功能
EasyPhotos.createAlbum(this, true,false, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setFileProviderAuthority("com.huantansheng.easyphotos.sample.fileprovider")//参数说明:见下方`FileProvider的配置`
          .setCount(22)//参数说明:最大可选数,默认1
          .start(requestCode);
  • 复杂选择器,最多选择2个视频3张图片
EasyPhotos.createAlbum(this,false,false,GlideEngine.getInstance())
                        .setFileProviderAuthority("com.huantansheng.easyphotos.demo.fileprovider")
                        .complexSelector(false,2,3)//参数说明:是否只能选择单类型,视频数,图片数。
                        .start(new SelectCallback() {
                            @Override
                            public void onResult(ArrayList<Photo> photos, boolean isOriginal) {
                                selectedPhotoList.clear();
                                selectedPhotoList.addAll(photos);
                                adapter.notifyDataSetChanged();
                                rvImage.smoothScrollToPosition(0);
                            }

                            @Override
                            public void onCancel() {
//                                Toast.makeText(SampleActivity.this, "Cancel", Toast.LENGTH_SHORT).show();

                            }
                        });
  • 复杂选择器,根据用户选择的第一个文件类型,确定用户只能选择的文件类型,视频只能选择2个,图片只能选择3个
EasyPhotos.createAlbum(this,false,false,GlideEngine.getInstance())
                        .setFileProviderAuthority("com.huantansheng.easyphotos.demo.fileprovider")
                        .complexSelector(true,2,3)//参数说明:是否只能选择单类型,视频数,图片数。
                        .start(new SelectCallback() {
                            @Override
                            public void onResult(ArrayList<Photo> photos, boolean isOriginal) {
                                selectedPhotoList.clear();
                                selectedPhotoList.addAll(photos);
                                adapter.notifyDataSetChanged();
                                rvImage.smoothScrollToPosition(0);
                            }

                            @Override
                            public void onCancel() {
//                                Toast.makeText(SampleActivity.this, "Cancel", Toast.LENGTH_SHORT).show();

                            }
                        });
  • 相册中包含广告(如果使用该模式,建议下载示例代码查看SampleActivity中的具体实现)
EasyPhotos.createAlbum(this, true,false, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setFileProviderAuthority("com.huantansheng.easyphotos.sample.fileprovider")//参数说明:见下方`FileProvider的配置`
          .setCount(9)//参数说明:最大可选数,默认1
          .setAdView(photosAdView, photosAdIsLoaded, albumItemsAdView, albumItemsAdIsLoaded)//参数说明:相册中的广告view,相册中的广告View数据是否绑定完毕,专辑列表广告View,专辑列表广告View数据是否绑定完毕。不执行该方法则不使用广告填充功能。广告view可以传空,适用于VIP不显示广告场景
          .start(requestCode);
  • 相册中包含默认勾选图片地址集合
EasyPhotos.createAlbum(this, true,false, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setFileProviderAuthority("com.huantansheng.easyphotos.sample.fileprovider")
          .setCount(9)
          .setSelectedPhotoPaths(selectedPhotoPathList,false)//参数说明:用户上一次勾选过的图片地址集合,ArrayList<String>类型;上次用户选择图片时是否选中了原图选项,如不用原图选项功能直接传false即可。
          .start(requestCode);   
   
  • 相册中不要拼图功能
EasyPhotos.createAlbum(this, true,false GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setFileProviderAuthority("com.huantansheng.easyphotos.sample.fileprovider")//参数说明:见下方`FileProvider的配置`
          .setCount(9)//参数说明:最大可选数,默认1
          .setPuzzleMenu(false)//参数说明:是否显示相机按钮,默认显示,传false即不显示
          .start(requestCode);    
    
  • 相册中包含默认勾选图片集合
EasyPhotos.createAlbum(this, true,false, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setFileProviderAuthority("com.huantansheng.easyphotos.sample.fileprovider")//参数说明:见下方`FileProvider的配置`
          .setCount(9)//参数说明:最大可选数,默认1
          .setSelectedPhotos(mSelectedPhotos)//参数说明:用户上一次勾选过的图片集合,ArrayList<Photo>类型
          .start(requestCode);   
  • 只显示限制尺寸或限制文件大小以上的图片
EasyPhotos.createAlbum(this, true,true, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setFileProviderAuthority("com.huantansheng.easyphotos.sample.fileprovider")
          .setCount(9)
          .setMinWidth(500)//参数说明:最小宽度500px
          .setMinHeight(500)//参数说明:最小高度500px
          .setMinFileSize(1024 * 10)//参数说明:最小文件大小10K
          .start(requestCode);
  • 显示原图按钮,并且默认选中,按钮可用。
EasyPhotos.createAlbum(this, false,false, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setCount(9)//参数说明:最大可选数,默认1
          .setOriginalMenu(true, true, null)//参数说明:是否默认选中状态,是否可用,不可用时用户点击将toast信息。是否默认选中可以根据EasyPhotos的回调走,回调中会给出用户上一次是否选择了原图选项的标识
          .start(requestCode);   
  • 显示原图按钮,并且默认不选中,按钮不可用。使用场景举例:仅VIP可以上传原图
boolean isVip = false;//假设获取用户信息发现该用户不是vip
EasyPhotos.createAlbum(this, false,false, GlideEngine.getInstance())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93)
          .setCount(9)//参数说明:最大可选数,默认1
          .setOriginalMenu(false, isVip, "该功能为VIP会员特权功能")//参数说明:是否默认选中状态,是否可用,不可用时用户点击将toast信息。是否默认选中可以根据EasyPhotos的回调走,回调中会给出用户上一次是否选择了原图选项的标识
          .start(requestCode);

通过接口获取回调数据:

start(SelectCallback callback)

EasyPhotos.createAlbum(this, true,false,GlideEngine.getInstance())
                        .setFileProviderAuthority("com.huantansheng.easyphotos.demo.fileprovider")
                        .setCount(22)
                        .start(new SelectCallback() {
                            @Override
                            public void onResult(ArrayList<Photo> photos,  boolean isOriginal) {
                                selectedPhotoList.clear();
                                selectedPhotoList.addAll(photos);
                                adapter.notifyDataSetChanged();
                                rvImage.smoothScrollToPosition(0);
                            }
                            @Override
                            public void onCancel() {

                            }
                        });    
       

EasyPhotos在 onActivityResult() 方法回调,获取选中图片集合

  • 返回对象集合:如果你需要了解图片的宽、高、大小、用户是否选中原图选项等信息,可以用这个
    ArrayList<Photo> resultPhotos = data.getParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS);

  • 返回图片地址集合时如果你需要知道用户选择图片时是否选择了原图选项,用如下方法获取
    boolean selectedOriginal = data.getBooleanExtra(EasyPhotos.RESULT_SELECTED_ORIGINAL, false);


onActivityResult() 方法中获取EasyPhotos的回调图片集合,包含图片的宽、高、大小、用户是否选中原图选项等信息:

  • data.getParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS);
List<Photo> mSelected = new ArrayList<>();

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == requestCode_easyPhotos && resultCode == RESULT_OK) {

        //返回对象集合:如果你需要了解图片的宽、高、大小、用户是否选中原图选项等信息,可以用这个
        ArrayList<Photo> resultPhotos = data.getParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS);

        mSelected.clear();
        mSelected.addAll(resultPhotos);
    }
}  

Photo 说明

    public String name;//图片名称
    public String path;//图片全路径
    public String type;//图片类型
    public int width;//图片宽度
    public int height;//图片高度
    public long size;//图片文件大小,单位:Bytes
    public long time;//图片拍摄的时间戳,单位:毫秒(注:2.2.9(不包含)之前的版本是秒)
    public boolean selected;//是否被选中,内部使用,无需关心
    public boolean selectedOriginal;//用户选择时是否选择了原图选项      
    public int orientation;//图片旋转角度    
    

FileProvider的配置


在android7.0之后必须加入FileProvider的配置才能获取拍照的照片,在你App的manifests文件里添加:    

	<provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.huantansheng.easyphotos.sample.fileprovider"//别忘了换成你自己的包名,另外这个字符串就是EasyPhotos.setFileProviderAuthoritiesText()的参数
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths_public" />
        </provider>     
  • file_paths_public文件需要你在App的res文件夹下的xml文件夹里自己创建,,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <paths>
        <root-path
            name="camera_photos"
            path="" />
    </paths>
</resources>