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

这里写图片描述

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.setImageBitmap(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);
    }

猜你喜欢

转载自blog.csdn.net/qq_37238649/article/details/78985518