图片可以移动放缩小 裁剪框也随着放大缩小 裁剪框可以触摸四个顶点放大缩小和移动

解决方案 »

  1.   

    以前自己做的,找个按钮调用startPhotoZoom方法即可
    /**
     * 调用系统裁剪功能
     */
    public void startPhotoZoom(Bitmap bitmap, int requestCode) {
    String str = MediaStore.Images.Media.insertImage(getContentResolver(),
    bitmap, null, null);
    Intent intent = new Intent("com.android.camera.action.CROP");
    if (TextUtils.isEmpty(str)) {// 大神酷派
    File file = getBitMapFile(bitmap);
    str = file.getPath();
    intent.setDataAndType(Uri.fromFile(file), "image/*");
    } else {
    Uri uri = Uri.parse(str);
    intent.setDataAndType(uri, "image/*");
    }
    // crop为true是设置在开启的intent中设置显示的view可以剪裁
    intent.putExtra("crop", "true");
    // aspectX aspectY 是宽高的比例
    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    // outputX,outputY 是剪裁图片的宽高
    intent.putExtra("outputX", 120);
    intent.putExtra("outputY", 120);
    intent.putExtra("return-data", true);
    intent.putExtra("noFaceDetection", true);
    startActivityForResult(intent, requestCode);
    }
    /**
     * BitMap转File
     */
    private File getBitMapFile(Bitmap bitmap) {
    File file;
    try {
    Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(
    getContentResolver(), bitmap, null, null));
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor actualimagecursor = managedQuery(uri,
    proj, null, null, null);
    int actual_image_column_index = actualimagecursor
    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    actualimagecursor.moveToFirst();
    String img_path = actualimagecursor
    .getString(actual_image_column_index);
    file = new File(img_path);
    } catch (Exception e) {
    // http://blog.csdn.net/zhoudailiang/article/details/48055869
    Log.d("大神F2", "MediaStore.Images.Media.insertImage  null");
    File openFile = new File(Environment.getExternalStorageDirectory()
    + "/DCIM/Camera/");
    openFile.mkdirs();// 尝试创建系统默相册文件夹
    String image_Path = Environment.getExternalStorageDirectory()
    + "/DCIM/Camera/" + getCurrentTime() + ".jpg";// 将要保存图片的路径
    file = new File(image_Path);
    try {
    BufferedOutputStream bos = new BufferedOutputStream(
    new FileOutputStream(file));
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
    bos.flush();
    bos.close();
    } catch (Exception e1) {
    Log.d("大神F2", e1.toString());
    }
    }
    return file;
    }
    /**
     * 得到当前系统的时间
     **/
    private String getCurrentTime() {
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss");
    String str = format.format(new Date());
    return str; }
    /**
     * 返回裁剪处理
     **/
    public Bitmap resultPhotoZoom(Intent data, int resultCode, Bitmap bitmap) {
    switch (resultCode) {
    case Activity.RESULT_OK: {
    // 此处的用于判断接收的Activity是不是你想要的那个
    try {
    Bundle bundle = data.getExtras();
    if (bitmap != null) {
    if (!bitmap.isRecycled()) {
    bitmap.recycle();
    }
    bitmap = null;
    }
    bitmap = bundle.getParcelable("data");
    return bitmap;
    } catch (Exception e) {
    Log.d("异常", e.toString());
    } }
    break;
    case Activity.RESULT_CANCELED:// 取消
    break;
    }
    return bitmap;
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d("获取位图", requestCode + "***********");
    switch (requestCode) {
    case 3:
    // 返回裁剪处理
    Bitmap bitmap = resultPhotoZoom(data, resultCode, bitmap);
    if (bitmap != null && resultCode == Activity.RESULT_OK) {
    // 自己的处理逻辑写在这里
    imgView.setImageBitmap(bitmap);
    }
    break;
    default:
    break;
    }
    }
      

  2.   

    compile 'com.soundcloud.android:android-crop:1.0.1@aar'希望能帮到你