如何裁剪Android中的drawable?

时间:2015-08-08 18:19:09

标签: java android

我正在开发一个Android应用程序,允许用户裁剪我的Drawable文件夹中的图像。这是我正在使用的代码,但它显示错误。我该如何解决这个问题?

   @Override
public void onClick(View v) {

    Uri imgUri=Uri.parse("android.resource://com.example.cropapp/"+R.drawable.apples);
     Intent intent = new Intent("com.android.camera.action.CROP");  
            intent.setDataAndType(imgUri, "image/*");  
            intent.putExtra("crop", "true");  
            intent.putExtra("aspectX", 1);  
            intent.putExtra("aspectY", 1);  
            intent.putExtra("outputX", 80);  
            intent.putExtra("outputY", 80);  
            intent.putExtra("return-data", true);
            startActivityForResult(intent, 1);
    }

2 个答案:

答案 0 :(得分:4)

  

我该如何解决这个问题?

首先,要认识到Android does not have a CROP Intent。有很多image cropping libraries for Android。使用一个。

其次,要认识到很少(如果有的话)应用宣传支持使用不当的<intent-filter>方案的android.resource结构。当你切换到图像裁剪库时,这不会是一个问题,因为一切都将在你自己的应用程序中。

但是,请记住,浩大的大多数图像裁剪方案涉及的是图像,而不是资源,更不用说可绘制的资源了。您完全有可能成为人类历史上第一个希望允许用户裁剪可绘制资源的人,因此您可能不得不自己开辟一条道路。

答案 1 :(得分:0)

以下代码段适用于AOSP Camera应用等自定义漫游,而不是大多数设备正式提供或支持

可能的解决方案?

尝试像这样的非官方库,

https://github.com/lvillani/android-cropimage

代码示例:

@Override
    public void onClick(View view) {
        if (view.equals(button)) {
            startActivityForResult(MediaStoreUtils.getPickImageIntent(this), REQUEST_PICTURE);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        File croppedImageFile = new File(getFilesDir(), "test.jpg");

        if ((requestCode == REQUEST_PICTURE) && (resultCode == RESULT_OK)) {
            // When the user is done picking a picture, let's start the CropImage Activity,
            // setting the output image file and size to 200x200 pixels square.
            Uri croppedImage = Uri.fromFile(croppedImageFile);

            CropImageIntentBuilder cropImage = new CropImageIntentBuilder(200, 200, croppedImage);
            cropImage.setOutlineColor(0xFF03A9F4);
            cropImage.setSourceImage(data.getData());

            startActivityForResult(cropImage.getIntent(this), REQUEST_CROP_PICTURE);
        } else if ((requestCode == REQUEST_CROP_PICTURE) && (resultCode == RESULT_OK)) {
            // When we are done cropping, display it in the ImageView.
            imageView.setImageBitmap(BitmapFactory.decodeFile(croppedImageFile.getAbsolutePath()));
        }
    }