无法在Android中使用Android Crop图像裁剪库

时间:2016-06-11 06:21:26

标签: android image crop resize-crop android-crop

我正在开发一个Android项目。在我的项目中,我想添加裁剪图像功能。所以我使用了这个库,https://github.com/jdamcd/android-crop。但是当我使用它时。它给了我错误。请参阅下面的方案。

这就是我安装的方式。

  1. 我把它放在爷爷,编译' com.soundcloud.android:android-crop:1.0.1@aar'

  2. 我把它放在清单文件中,

  3. 这就是我在代码中使用的方式。

    1. 我打开像这样的图像选择器

      @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==IMAGE_CHOOSER_REQUEST_COODE && resultCode == RESULT_OK) { Crop.of(data.getData(),null).asSquare().start(CreateItemActivity.this); } else if(requestCode == Crop.REQUEST_CROP && resultCode == RESULT_OK) { Uri filePath = data.getData(); } }

    2. 在onActivityResult中,我这样做

      resultCode==RESULT_OK
    3. 但是在我裁剪图像后,我点击"确定",活动的结果不等于OK。所以我无法检索裁剪的图像数据。

      所以我删除了 if(requestCode == Crop.REQUEST_CROP) { Uri filePath = data.getData(); } ,我就这样检索了:

      const path = require('path');
      const nodeExternals = require('webpack-node-externals');
      
      module.exports = {
        entry: [
          'bootstrap-loader',
          './src/index.js',
          'style!css!./src/style/style.css'
        ],
        output: {
          path: path.resolve(__dirname + 'build'),
          filename: 'bundle.js'
        },
        module: {
          loaders: [
            { test: /\.jsx?$/,
              loader: 'babel-loader'
            },
            {
              test: /\.scss$/,
              loaders: [
                'style',
                'css?modules&importLoaders=2&localIdentName=[name]__[local]__[hash:base64:5]',
                'postcss',
                'sass',
              ],
            },
            {
              test: /\.woff2?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
              loader: "url?limit=10000"
            },
            {
              test: /\.(ttf|eot|svg)(\?[\s\S]+)?$/,
              loader: 'file'
            },
            // Bootstrap 3
            { test:/bootstrap-sass[\/\\]assets[\/\\]javascripts[\/\\]/, loader: 'imports?jQuery=jquery' },
          ]
        }
      }
      
    4. 数据始终为空。我的代码出了什么问题,如何解决?

1 个答案:

答案 0 :(得分:1)

build.gradle档案

中添加此内容
repositories {
    mavenCentral()
}

dependencies {
  compile 'com.edmodo:cropper:1.0.1'
}

像这样制作图像的布局

    <?xml version="1.0" encoding="utf-8"?>
<ScrollView
    android:id="@+id/scrollview"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="@dimen/content_padding">

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/title"
            android:textSize="24sp"
            android:textStyle="bold"/>

        <com.edmodo.cropper.CropImageView
            android:id="@+id/CropImageView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/content_padding"
            android:adjustViewBounds="true"
            android:scaleType="centerInside"
            android:src="@drawable/butterfly"/>

        <LinearLayout
            android:id="@+id/fixedAspectRatioLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/content_padding"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/fixedAspectRatio"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:gravity="center_vertical|end"
                android:text="@string/fixedAspectRatio"/>

            <FrameLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1">

                <ToggleButton
                    android:id="@+id/fixedAspectRatioToggle"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical|start"/>

            </FrameLayout>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/content_padding_half"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/aspectRatioXHeader"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:gravity="end"
                android:text="@string/aspectRatioXHeader"/>

            <TextView
                android:id="@+id/aspectRatioX"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:gravity="start"
                tools:text="10"/>

        </LinearLayout>

        <SeekBar
            android:id="@+id/aspectRatioXSeek"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:max="100"
            android:progress="10"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/content_padding_half"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/aspectRatioYHeader"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:gravity="end"
                android:text="@string/aspectRatioYHeader"/>

            <TextView
                android:id="@+id/aspectRatioY"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:gravity="start"
                tools:text="10"/>

        </LinearLayout>

        <SeekBar
            android:id="@+id/aspectRatioYSeek"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:max="100"
            android:progress="10"/>

        <LinearLayout
            android:id="@+id/showGuidelinesLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/content_padding_half"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/showGuidelines"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:gravity="end"
                android:text="@string/showGuidelines"/>

            <FrameLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1">

                <Spinner
                    android:id="@+id/showGuidelinesSpin"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:entries="@array/showGuidelinesArray"
                    android:gravity="start"/>

            </FrameLayout>

        </LinearLayout>

        <Button
            android:id="@+id/Button_crop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="@dimen/content_padding"
            android:minWidth="120dp"
            android:text="@string/crop"
            android:textColor="#33B5E5"
            android:textSize="20sp"/>

        <ImageView
            android:id="@+id/croppedImageView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/content_padding"
            android:adjustViewBounds="true"
            android:contentDescription="@string/croppedImageDesc"
            android:scaleType="centerInside"/>

    </LinearLayout>

</ScrollView>

<强> MainActivity.java

public class MainActivity extends Activity {

    private static final int GUIDELINES_ON_TOUCH = 1;


    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        // Initialize Views.
        final ToggleButton fixedAspectRatioToggleButton = (ToggleButton) findViewById(R.id.fixedAspectRatioToggle);
        final TextView aspectRatioXTextView = (TextView) findViewById(R.id.aspectRatioX);
        final SeekBar aspectRatioXSeekBar = (SeekBar) findViewById(R.id.aspectRatioXSeek);
        final TextView aspectRatioYTextView = (TextView) findViewById(R.id.aspectRatioY);
        final SeekBar aspectRatioYSeekBar = (SeekBar) findViewById(R.id.aspectRatioYSeek);
        final Spinner guidelinesSpinner = (Spinner) findViewById(R.id.showGuidelinesSpin);
        final CropImageView cropImageView = (CropImageView) findViewById(R.id.CropImageView);
        final ImageView croppedImageView = (ImageView) findViewById(R.id.croppedImageView);
        final Button cropButton = (Button) findViewById(R.id.Button_crop);

        // Initializes fixedAspectRatio toggle button.
        fixedAspectRatioToggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                cropImageView.setFixedAspectRatio(isChecked);
                cropImageView.setAspectRatio(aspectRatioXSeekBar.getProgress(), aspectRatioYSeekBar.getProgress());
                aspectRatioXSeekBar.setEnabled(isChecked);
                aspectRatioYSeekBar.setEnabled(isChecked);
            }
        });
        // Set seek bars to be disabled until toggle button is checked.
        aspectRatioXSeekBar.setEnabled(false);
        aspectRatioYSeekBar.setEnabled(false);

        aspectRatioXTextView.setText(String.valueOf(aspectRatioXSeekBar.getProgress()));
        aspectRatioYTextView.setText(String.valueOf(aspectRatioXSeekBar.getProgress()));

        // Initialize aspect ratio X SeekBar.
        aspectRatioXSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar aspectRatioXSeekBar, int progress, boolean fromUser) {
                if (progress < 1) {
                    aspectRatioXSeekBar.setProgress(1);
                }
                cropImageView.setAspectRatio(aspectRatioXSeekBar.getProgress(), aspectRatioYSeekBar.getProgress());
                aspectRatioXTextView.setText(String.valueOf(aspectRatioXSeekBar.getProgress()));
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // Do nothing.
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // Do nothing.
            }
        });

        // Initialize aspect ratio Y SeekBar.
        aspectRatioYSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar aspectRatioYSeekBar, int progress, boolean fromUser) {
                if (progress < 1) {
                    aspectRatioYSeekBar.setProgress(1);
                }
                cropImageView.setAspectRatio(aspectRatioXSeekBar.getProgress(), aspectRatioYSeekBar.getProgress());
                aspectRatioYTextView.setText(String.valueOf(aspectRatioYSeekBar.getProgress()));
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // Do nothing.
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // Do nothing.
            }
        });

        // Set up the Guidelines Spinner.
        guidelinesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                cropImageView.setGuidelines(i);
            }

            public void onNothingSelected(AdapterView<?> adapterView) {
                // Do nothing.
            }
        });
        guidelinesSpinner.setSelection(GUIDELINES_ON_TOUCH);

        // Initialize the Crop button.
        cropButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Bitmap croppedImage = cropImageView.getCroppedImage();
                croppedImageView.setImageBitmap(croppedImage);
            }
        });
    }
}

有关详细信息,请访问:https://github.com/edmodo/cropper