uCrop自定义圆框裁剪样式完整代码
时间: 2023-07-03 17:18:28 浏览: 305
以下是一个完整的代码示例,可以实现自定义圆框裁剪样式:
1. 添加依赖和权限
在项目的 `build.gradle` 文件中添加依赖:
```
implementation 'com.github.yalantis:ucrop:2.2.6'
```
在 AndroidManifest.xml 文件中添加权限:
```
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
2. 调用裁剪界面
在需要裁剪图片的地方,调用裁剪界面:
```
Uri sourceUri = ...; // 原始图片的 Uri
Uri destinationUri = ...; // 裁剪后图片的 Uri
UCrop.of(sourceUri, destinationUri)
.withAspectRatio(1, 1) // 设置裁剪比例为 1:1
.withMaxResultSize(500, 500) // 设置裁剪后图片的最大尺寸
.withOptions(getCropOptions()) // 设置裁剪界面的样式
.start(this);
```
3. 自定义裁剪界面样式
在 `getCropOptions()` 方法中设置裁剪界面的样式:
```
private UCrop.Options getCropOptions() {
UCrop.Options options = new UCrop.Options();
// 设置裁剪框为圆形
options.setCircleDimmedLayer(true);
options.setShowCropFrame(false);
options.setShowCropGrid(false);
// 设置裁剪框的颜色和透明度
options.setDimmedLayerColor(ContextCompat.getColor(this, R.color.ucrop_color_default_dimmed));
options.setDimmedLayerAlpha(0.8f);
// 设置裁剪框的线宽
options.setStrokeWidth(2);
options.setToolbarColor(ContextCompat.getColor(this, R.color.ucrop_color_toolbar));
options.setStatusBarColor(ContextCompat.getColor(this, R.color.ucrop_color_statusbar));
options.setToolbarWidgetColor(ContextCompat.getColor(this, R.color.ucrop_color_toolbar_widget));
options.setToolbarTitle("裁剪图片");
return options;
}
```
以上代码中,我们将裁剪框设置为圆形,并设置了裁剪框的颜色、透明度、线宽、Toolbar颜色等属性。
4. 处理裁剪结果
在 `onActivityResult()` 方法中处理裁剪结果:
```
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == UCrop.REQUEST_CROP) {
Uri resultUri = UCrop.getOutput(data);
// 处理裁剪后的图片
handleCropResult(resultUri);
} else if (resultCode == UCrop.RESULT_ERROR) {
Throwable error = UCrop.getError(data);
// 处理裁剪错误
handleCropError(error);
}
}
```
以上代码中,我们通过 `UCrop.getOutput(data)` 方法获取裁剪后的图片的 Uri,然后处理裁剪后的图片或者错误信息。
完整代码示例:
```
public class MainActivity extends AppCompatActivity {
private ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = findViewById(R.id.image_view);
findViewById(R.id.btn_select_image).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectImage();
}
});
}
private void selectImage() {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, REQUEST_SELECT_IMAGE);
}
private static final int REQUEST_SELECT_IMAGE = 0x01;
private static final int REQUEST_SELECT_CROP = 0x02;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == REQUEST_SELECT_IMAGE) {
Uri sourceUri = data.getData();
Uri destinationUri = Uri.fromFile(new File(getCacheDir(), "cropped.jpg"));
UCrop.of(sourceUri, destinationUri)
.withAspectRatio(1, 1)
.withMaxResultSize(500, 500)
.withOptions(getCropOptions())
.start(this, REQUEST_SELECT_CROP);
} else if (resultCode == RESULT_OK && requestCode == REQUEST_SELECT_CROP) {
Uri resultUri = UCrop.getOutput(data);
mImageView.setImageURI(resultUri);
} else if (resultCode == UCrop.RESULT_ERROR) {
Throwable error = UCrop.getError(data);
Toast.makeText(this, error.getMessage(), Toast.LENGTH_SHORT).show();
}
}
private UCrop.Options getCropOptions() {
UCrop.Options options = new UCrop.Options();
options.setCircleDimmedLayer(true);
options.setShowCropFrame(false);
options.setShowCropGrid(false);
options.setDimmedLayerColor(ContextCompat.getColor(this, R.color.ucrop_color_default_dimmed));
options.setDimmedLayerAlpha(0.8f);
options.setStrokeWidth(2);
options.setToolbarColor(ContextCompat.getColor(this, R.color.ucrop_color_toolbar));
options.setStatusBarColor(ContextCompat.getColor(this, R.color.ucrop_color_statusbar));
options.setToolbarWidgetColor(ContextCompat.getColor(this, R.color.ucrop_color_toolbar_widget));
options.setToolbarTitle("裁剪图片");
return options;
}
}
```
以上代码可以实现选择图片并进行圆框裁剪,并将裁剪后的图片显示在 ImageView 中。你可以根据自己的需求进行修改。
阅读全文