菜鸟日记(yzy):集成Ucrop裁剪图片架构,并创建管理类使用

一:使用原因

     虽然,android系统自带裁剪图片的相关应用,但是说实话缺陷很大, 先不说界面,UI,不允许选择图片裁剪等等的诸多问

题,单单适配性贼差这一点, 就让人不得不放弃使用。特别是小米手机,华为手机要花精力去解决闪退问题,还不如自己写个裁

剪功能,或者使用相关的框架。由于项目短期时间内要解决小米手机的适配bug, 所以, 我准备使用框架的方案来解决这个问

题。

二 :相关代码

(1) 管理类:UploadImgManagr.java

public class UploadImgManagr {

    public final static int CAMERA_REQUEST_CODE = 0x0101;  //打开相机
    public final static int ALBUM_REQUEST_CODE = 0x0102;   //打开崩地突破
    public final static int CROP_REQUEST_CODE = UCrop.REQUEST_CROP; //裁剪图片

    private Activity context;
    private static volatile  UploadImgManagr instance;

    private UploadImgManagr(Activity context){
        this.context = context;
    }

    /**
     * 实例化管理类 单例模式-双重校验锁
     */
    public static UploadImgManagr instance(Activity context){

        if (instance == null){
            synchronized(Singleton.class){
                if(instance == null){
                     instance = new UploadImgManagr(context);
                }
            }
            
        }
        return instance;
    }

    /**
     *  打开本地图片
     */
    public void uploadLocalPicture(){
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        context.startActivityForResult(intent, ALBUM_REQUEST_CODE);
    }

    /**
     * 打开相机功能
     */
    public Uri uploadCameraPicture(){
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        String mTempPhotoPath = Environment.getExternalStorageDirectory() + File.separator + "photo.jpeg";
        Uri imageUri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".my.provider", new File(mTempPhotoPath));
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        context.startActivityForResult(intent, CAMERA_REQUEST_CODE);
        return imageUri;
    }

    /**
     * 裁剪图片
     */
    public void toCropHandler(Uri uri, String path){
        UCrop.of(uri, Uri.fromFile(new File(context.getCacheDir(),path))).withAspectRatio(1, 1).withMaxResultSize(150, 150).start(context);
    }

    /**
     * 获取Urcp裁剪后的图片
     */
    public Bitmap getCropPicture(Intent data, Bitmap defaultBitmap){
        String imagePath  ;

        if (null != UCrop.getOutput(data) && null != (imagePath = Objects.requireNonNull(UCrop.getOutput(data)).toString())){
            try {
                InputStream is = new URL(imagePath).openStream();
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                return bitmap;
            }  catch (IOException e) {
                e.printStackTrace();
            }
        }else {
            Toast.makeText(context, "获取图片失败", Toast.LENGTH_SHORT).show();
            return defaultBitmap;
        }

        return defaultBitmap;
    }
}

(2) 集成Ucrop架构

     implementation 'com.yalantis:ucrop:1.4.1'

 

(3) 注册 实现相机功能所需的provider和Ucrop相关Activity

<!-- 截图工具  UCrop -->
<provider
    android:name=".global.GenericFileProvider"
    android:authorities="${applicationId}.my.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>

<activity android:name="com.yalantis.ucrop.UCropActivity"
    android:screenOrientation="portrait"
    android:theme="@style/Theme.Design.Light.NoActionBar"/>

(4) 创建provider和相关xml文件

public class GenericFileProvider extends FileProvider {
}
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

  END

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值