Skip to content

PictureSelector 2.0 用前需知

Luck edited this page Jan 9, 2022 · 1 revision

集成之前请务必先查看文档,注意如下事项;

集成之前先看文档或Demo不要瞎提 Issues!!!

关于PictureSelector主题配制,如果需要深度定制的用户建议使用动态Code的方式配制而不要使用XML方式,因为新增的一些主题配制项只会更新在Code方式下。

此库适配了Android X,如果自己项目还在使用Support并且一时难以转成Android X的请谨慎集成!!!

非Android X用户解决方案是建议导入PictureSelector源码改成Support版本,本人由于工作关系就不在维护Support版本了。

Android X转回Support 分两步:
1、打开项目根目录gradle.properties文件把android.useAndroidX=true和android.enableJetifier=true设置为false;
2、将PictureSelector所有的androidx.开头的包名替换成android.support.开头的就可以了;
v2.5.3版本开始默认采用分页加载模式,api提供3个参数.isPageStrategy();1、是否开启分页 2、pageSize每页最大数 3、是否过滤已损坏图片

2.5.1新增.loadCacheResourcesCallback(); api,优化华为Android 10 loading过长问题;
具体使用方式如下;
.loadCacheResourcesCallback(new CacheResourcesEngine() {
       @Override
       public String onCachePath(Context context, String url) {
       /**
        * Glide版本号,请根据用户集成为准 这里只是模拟;如果是其他图片加载框架请根据具体的
        * 使用方式实现
        */
        int GLIDE_VERSION = 4;
        File cacheFile;
        if (GLIDE_VERSION >= 4) {
          // Glide 4.x
          cacheFile = ImageCacheUtils.getCacheFileTo4x(context, url);
          } else {
          // Glide 3.x
          cacheFile = ImageCacheUtils.getCacheFileTo3x(context, url);
          }
          return cacheFile != null ? cacheFile.getAbsolutePath() : "";
         }
     });

/**
 * 2.5.1新增自定义拍照回调接口
 * PictureSelector自定义的一些回调接口
 */
 private OnPictureSelectorInterfaceListener interfaceListener = new OnPictureSelectorInterfaceListener() {
        @Override
        public void onCameraClick(Context context, PictureSelectionConfig config, int type) {
            // TODO  必须使用context.startActivityForResult(activity.class,PictureConfig.REQUEST_CAMERA);

            // TODO 注意:使用自定义相机时,需要设置PictureSelectionConfig两个值
            //  1、config.cameraPath (文件输出路径)
            //  2、 config.cameraMimeType (相机类型 图片or视频)
            switch (type) {
                case PictureConfig.TYPE_IMAGE:
                    // 拍照
                    ToastUtils.s(getContext(), "Click Camera Image");
                    break;
                case PictureConfig.TYPE_VIDEO:
                    // 录视频
                    ToastUtils.s(getContext(), "Click Camera Video");
                    break;
                case PictureConfig.TYPE_AUDIO:
                    // 录音
                    ToastUtils.s(getContext(), "Click Camera Recording");
                    break;
                default:
                    break;
            }
        }
    };

v2.4.6增加接口Callback方式返回结果... 主要用于解决老的requestCode方式Bundle传值过大闪退问题,
这个可以自己根据业务场景需要替换,如果选择图片过多可以使用Callback方式。   
.forResult(new OnResultCallbackListener() {
    @Override
    public void onResult(List<LocalMedia> result) {
          // Callback方式返回结果...      
      }
    @Override
    public void onCancel() {
         // 取消选择
         Log.i(TAG, "PictureSelector Cancel");
      }
   });
另增加.bindCustomPlayVideoCallback();// 自定义使用自己的视频播放器回调

v2.4.3增加 .isUseCustomCamera(true);// 是否使用自定义相机api,
但使用前需要在Application中,实现implements CameraXConfig.Provider接口并实现如下方法:
 
@NonNull
@Override
public CameraXConfig getCameraXConfig() {
    return Camera2Config.defaultConfig();
}
具体可参考Demo中Application类中的实现方式

v2.3.2开始移除了glide,所以使用v2.3.2版本以后的用户一定要配制好图片加载引擎 否则列表图片加载不出来!!!
.loadImageEngine(GlideEngine.createGlideEngine())// 外部传入图片加载引擎,必传项
 具体请参考Demo MainActivity.java实现方式

v2.3.3 新增动态配制主题,建议不要与.theme(R.theme.style);方式共用 两者只选其一配制 个人建议使用动态配制为好!!!

// 动态自定义相册主题
PictureParameterStyle mPictureParameterStyle = new PictureParameterStyle(); 

// 动态自定义裁剪主题
PictureCropParameterStyle mCropParameterStyle = new PictureCropParameterStyle(); 

// 自定义相册弹起动画配制
PictureWindowAnimationStyle windowAnimationStyle = new PictureWindowAnimationStyle(); 
windowAnimationStyle.ofAllAnimation(R.anim.picture_anim_up_in, R.anim.picture_anim_down_out);

以上两者具体使用方法请参考Demo MainActivity.java

v2.3.8 PictureSelector加入日志管理工具-自由选择
1.PictureSelector加入Crash日志管理工具方便错误分析,具体使用方式请查看Demo Application类中...
	Application onCreate加入两行代码
		
	/** PictureSelector日志管理配制开始 **/
	  
        // PictureSelector 绑定监听用户获取全局上下文或其他...
        PictureAppMaster.getInstance().setApp(this);
        // PictureSelector Crash日志监听
        PictureSelectorCrashUtils.init((t, e) -> {
            // Crash之后的一些操作可再此处理,没有就忽略...
        });
       
	/** PictureSelector日志管理配制结束 **/