您的位置:首页 > 移动开发 > Android开发

Android 强大的UCrop框架实现头像裁剪功能

2018-01-05 21:52 246 查看


GitHub:https://github.com/Yalantis/uCrop

第一步:在gradle/app 导入依赖库(最新版本见上):

compile ‘com.yalantis:ucrop:1.4.1’

第二步:在AndroidManifest.xml进行注册

<activity
//screenOrientation:设定该活动的方向(portrait:纵向,landscape:横向,unspecified:由系統選擇顯示方向,还有user,behind,sensor,nosensor)
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>


MainActivity实现裁剪功能代码(调用手机照相机和相册详见:http://blog.csdn.net/qq_37238649/article/details/78969720)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
//照相
case TAKE_PHOTO:
if (resultCode == RESULT_OK ){
startCrop(imageUri);//照相完毕裁剪处理
}
break;
//相册
case CHOOSE_PHOTO:
if(resultCode == RESULT_OK){
//判断手机系统版本号
startCrop(data.getData());
/*if(Build.VERSION.SDK_INT >= 19){
//Android 4.4或以上处理图片方法
handleImageOnKitKat(data);
} else {
//Android 4.4以下处理图片方法
handleImageBeforeKitKat(data);
}*/
}
break;
//裁剪后的效果
case UCrop.REQUEST_CROP:
if(resultCode==RESULT_OK){
Uri resultUri=UCrop.getOutput(data);
try {
Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(resultUri));
headimageView.setImageBitm
4000
ap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
//错误裁剪的结果
case UCrop.RESULT_ERROR:
if(resultCode==RESULT_OK){
final Throwable cropError = UCrop.getError(data);
handleCropError(cropError);
}
break;
}
}

//处理剪切失败的返回值
private void handleCropError(Throwable cropError) {
deleteTempPhotoFile();
if (cropError != null) {
Toast.makeText(MainActivity.this, cropError.getMessage(), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "无法剪切选择图片", Toast.LENGTH_SHORT).show();
}
}

/**
* 删除拍照临时文件
*/
private void deleteTempPhotoFile() {
File tempFile = new File(Environment.getExternalStorageDirectory() + File.separator + "output_iamge.jpg");
if (tempFile.exists() && tempFile.isFile()) {
tempFile.delete();
}
}


UCrop裁剪的参数,详细参数见:http://blog.csdn.net/u011771755/article/details/50676888

//图片裁剪的方法
private void startCrop(Uri uri){
UCrop.Options options = new UCrop.Options();
//裁剪后图片保存在文件夹中
Uri destinationUri = Uri.fromFile(new File(getExternalCacheDir(), "uCrop.jpg"));
UCrop uCrop = UCrop.of(uri, destinationUri);//第一个参数是裁剪前的uri,第二个参数是裁剪后的uri
uCrop.withAspectRatio(1,1);//设置裁剪框的宽高比例
//下面参数分别是缩放,旋转,裁剪框的比例
options.setAllowedGestures(UCropActivity.ALL,UCropActivity.NONE,UCropActivity.ALL);
options.setToolbarTitle("移动和缩放");//设置标题栏文字
options.setCropGridStrokeWidth(2);//设置裁剪网格线的宽度(我这网格设置不显示,所以没效果)
options.setCropFrameStrokeWidth(10);//设置裁剪框的宽度
options.setMaxScaleMultiplier(3);//设置最大缩放比例
options.setHideBottomControls(true);//隐藏下边控制栏
options.setShowCropGrid(false);  //设置是否显示裁剪网格
options.setOvalDimmedLayer(true);//设置是否为圆形裁剪框
options.setShowCropFrame(false); //设置是否显示裁剪边框(true为方形边框)
options.setToolbarWidgetColor(Color.parseColor("#ffffff"));//标题字的颜色以及按钮颜色
options.setDimmedLayerColor(Color.parseColor("#AA000000"));//设置裁剪外颜色
options.setToolbarColor(Color.parseColor("#000000")); // 设置标题栏颜色
options.setStatusBarColor(Color.parseColor("#000000"));//设置状态栏颜色
options.setCropGridColor(Color.parseColor("#ffffff"));//设置裁剪网格的颜色
options.setCropFrameColor(Color.parseColor("#ffffff"));//设置裁剪框的颜色
uCrop.withOptions(options);
uCrop.start(this);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: