当前位置: 首页 > 工具软件 > Image Cropper > 使用案例 >

Android图片裁剪——第三方开源框架Android Image Cropper的使用

穆正祥
2023-12-01

因为项目中有裁剪图片这一需求,我在网上找到了Android Image Cropper,一款使用起来非常简单第三方图片裁剪框架,在此记录一下。
项目的github地址:Android Image Cropper

Android Image Cropper有两种使用方法:
1、Activity用法
(1)在app模块的build.gradle文件中添加依赖

api 'com.theartofdev.edmodo:android-image-cropper:2.8.+'

(2)在AndroidManifest.xml文件中声明所需要的权限

<!--读取SD卡-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--写入SD卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

(3)在AndroidManifest.xml文件中注册CropImageActivity

<activity
            android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
            android:theme="@style/Base.Theme.AppCompat" /> <!-- optional (needed if default theme has no action bar) -->

(4)在需要裁减图片的地方启动CropImageActivity

CropImage.activity()
        .setGuidelines(CropImageView.Guidelines.ON) //开启选择器
        .setActivityTitle("头像裁剪")
        .setCropShape(CropImageView.CropShape.RECTANGLE)  //选择矩形裁剪
                        .start(UserDataActivity.this);

(5)重写onActivityResult,获取裁剪后的图片的uri:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   
        //用户没有进行有效的设置操作,返回
        if (resultCode == RESULT_CANCELED) {
            Toast.makeText(getApplication(), "取消", Toast.LENGTH_LONG).show();
            return;
        }

        switch (requestCode) {
            case CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE:{
                CropImage.ActivityResult result = CropImage.getActivityResult(data);
             
                if(resultCode==RESULT_OK){
                    final Uri resultUri = result.getUri();  //获取裁减后的图片的Uri
                  
                    saveHeadPortrait(resultUri); //我自己写的处理图片的方法

                }else if(resultCode==CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE){
                    Log.d("PhotoActivity", "onActivityResult: Error");
                    Exception exception = result.getError();
                }
                break;
            }


        super.onActivityResult(requestCode, resultCode, data);
    }

2、View用法
(1)(2)步和Activity用法一样。

(3)增加CropImageView到Activity的布局文件中

<!-- Image Cropper fill the remaining available height -->
<com.theartofdev.edmodo.cropper.CropImageView
  xmlns:custom="http://schemas.android.com/apk/res-auto"
  android:id="@+id/cropImageView"
  android:layout_width="match_parent"
  android:layout_height="0dp"
  android:layout_weight="1"/>

(4)用的时候设置图片的uri

cropImageView.setImageUriAsync(uri);
// or (prefer using uri for performance and better user experience)
cropImageView.setImageBitmap(bitmap);

(5)获取裁减后的图片

// subscribe to async event using cropImageView.setOnCropImageCompleteListener(listener)
cropImageView.getCroppedImageAsync();
// or
Bitmap cropped = cropImageView.getCroppedImage();
 类似资料: