pictureselector + crop 拍照或相册选中图片剪切后保存(含权限获取)

16 篇文章 0 订阅
4 篇文章 0 订阅

修改 ,不用android-crop裁剪功能,pictureselector自带裁剪。。。。。。。

		.isEnableCrop(true) // 是否裁剪
		 .withAspectRatio(1, 1)// int 裁剪比例 如16:9 3:2 3:4 1:1 可自定义

1.依赖

	api 'com.github.getActivity:XXPermissions:11.8' //权限
	 implementation 'com.soundcloud.android:android-crop:1.0.1@aar' //裁剪包,高版本调用手机裁剪功能不行,调用这个包
	 api 'io.github.lucksiege:pictureselector:v2.7.3-rc05'  //拍照相册图片选择器

2.调用, 注意getFilesDir(),是保存在app 的file内,不需要可以换getCacheDir(),保存在缓存cache文件内

		PictureSelectorUtil.selectSingleImage(CatInfoAct.this, true, imagePath -> {//封装权限获取及回调获取到的图片路径Path --》imagePath 


            File ori = new File(imagePath);
            	
                Uri destination=Uri.fromFile(new File(getFilesDir(),"csg"+System.currentTimeMillis()+".jpg"));//保存的文件路径,文件名
                Crop.of(Uri.fromFile(ori),destination).asSquare().start(this); //返回uri进行裁剪
        });  

3.获取裁剪后的图片

	    @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == Crop.REQUEST_CROP) {
      String url =  setImageToHeadView(data);//获取更新到UI里并返回文件路径做保存
        headUrl = url;
      Log.e("CZH","url"+url); //  '/data/user/0/com.catowner.note/files/csg1666254196337.jpg'
    }
}

    private String setImageToHeadView(Intent result) {
    if (result != null) {
    picUri = Crop.getOutput(result);
    Glide.with(this)
            .load(picUri)
            .apply(options)
            .into(binding.head);
        return picUri.getPath();
    }
    return "";
}

以下为封装的PictureSelectorUtil

	public class PictureSelectorUtil {

public static void selectSingleImage(@NonNull Activity activity, boolean useCamera, @NonNull SingleImageCallback callback) {
    List<String> permissions = new ArrayList<>(); //所需权限集合
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        permissions.add(Permission.MANAGE_EXTERNAL_STORAGE);
    } else {
        permissions.add(Permission.READ_EXTERNAL_STORAGE);
        permissions.add(Permission.WRITE_EXTERNAL_STORAGE);
    }
    String msg = "此功能需要存储权限";
    if (useCamera) {
        permissions.add(Permission.CAMERA);
        msg = "此功能需要存储和相机权限";
    }
    PermissionUtil.hasPermissions(activity, permissions, msg, () -> {
        PictureSelector.create(activity) //PictureSelector选择器,有兴趣可以看一下它的配置参数进行设置
                .openGallery(PictureMimeType.ofImage())
                .imageEngine(GlideEngine.getInstance())
                .isCamera(useCamera) //是否要有拍摄
                .selectionMode(PictureConfig.SINGLE)
                .forResult(new OnResultCallbackListener<LocalMedia>() {
                    @Override
                    public void onResult(List<LocalMedia> result) {
                        if (result.size() > 0) {
                            String imagePath = result.get(0).getRealPath();
                            callback.onSelected(imagePath);
                        }
                    }

                    @Override
                    public void onCancel() {
                    }
                });
    });
}

		    public interface SingleImageCallback {

    void onSelected(@NonNull String imagePath); //回调接口
}
}

权限获取的 PermissionUtil

		public class PermissionUtil {
		    public static void hasPermissions(@NonNull Context context, List<String> permissions, String 								 msg, @NonNull HasCallback callback) {
    XXPermissions.with(context)
            .permission(permissions)
            .request(new OnPermissionCallback() {
                @Override
                public void onGranted(List<String> permissions, boolean all) {
                    if (all) {
                        callback.onGranted();
                    }
                }

                @Override
                public void onDenied(List<String> permissions, boolean never) {
                    if (never) {
                        AlertDialog alertDialog = new AlertDialog.Builder(context)
                                .setTitle("警告")
                                .setMessage(msg)
                                .setPositiveButton("跳转到权限", (dialog, which) -> {
                                    XXPermissions.startPermissionActivity(context, permissions);
                                })
                                .setNegativeButton("取消", null)
                                .create();
                        alertDialog.show();
                        alertDialog.getWindow().setGravity(Gravity.CENTER);
                    } else {
                        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
                    }
                }
            });
}
	
	    public interface HasCallback {

    		void onGranted(); //回调接口
	 }
}

大致效果图:

请添加图片描述

请添加图片描述

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值