{"id":26648137,"url":"https://github.com/IsseiAoki/SimpleCropView","last_synced_at":"2025-03-25T00:01:50.679Z","repository":{"id":38816617,"uuid":"39421354","full_name":"igreenwood/SimpleCropView","owner":"igreenwood","description":"A simple image cropping library for Android.","archived":false,"fork":false,"pushed_at":"2024-03-05T05:38:57.000Z","size":8157,"stargazers_count":2489,"open_issues_count":80,"forks_count":467,"subscribers_count":79,"default_branch":"master","last_synced_at":"2024-10-29T17:43:29.837Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/igreenwood.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-07-21T03:15:29.000Z","updated_at":"2024-10-27T21:36:29.000Z","dependencies_parsed_at":"2024-05-03T15:36:44.460Z","dependency_job_id":null,"html_url":"https://github.com/igreenwood/SimpleCropView","commit_stats":null,"previous_names":["isseiaoki/simplecropview"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igreenwood%2FSimpleCropView","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igreenwood%2FSimpleCropView/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igreenwood%2FSimpleCropView/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igreenwood%2FSimpleCropView/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/igreenwood","download_url":"https://codeload.github.com/igreenwood/SimpleCropView/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245372377,"owners_count":20604491,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-25T00:01:27.514Z","updated_at":"2025-03-25T00:01:50.647Z","avatar_url":"https://github.com/igreenwood.png","language":"Java","readme":"![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/cover-art.png)\n\n# SimpleCropView\n[![build status](https://travis-ci.org/IsseiAoki/SimpleCropView.svg?branch=master)](https://travis-ci.org/IsseiAoki/SimpleCropView.svg?branch=master)\n[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-SimpleCropView-green.svg?style=flat)](https://android-arsenal.com/details/1/2366)\n[![Android Gems](http://www.android-gems.com/badge/IsseiAoki/SimpleCropView.svg?branch=master)](http://www.android-gems.com/lib/IsseiAoki/SimpleCropView)\n\nThe SimpleCropView is an image cropping library for Android.\u003cbr\u003e\nIt simplifies your code for cropping image and provides an easily customizable UI.\u003cbr\u003e\u003cbr\u003e\nSupported on API Level 14 and above.\n\n\n![demo](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/1.1.0/demo_basic_usage.gif)\n\n\n## Table of Contents\n* [Download](#download) \n* [Example](#example)\n  * [Image Cropping](#image-cropping) \n  * [Image Rotation](#image-rotation)\n* [Load Image](#load-image)\n  * [Apply Thumbnail](#apply-thumbnail) \n* [Crop and Save Image](#crop-and-save-image)\n  * [Compress Format](#compress-format)\n  * [Compress Quality](#compress-quality)\n* [Customization](#customization) \n  * [Maximum Output Size](#maximum-output-size)\n  * [Fixed Output Size](#fixed-output-size)\n  * [CropMode](#cropmode)\n  * [MinimumFrameSize](#minimumframesize)\n  * [InitialFrameScale](#initialframescale)\n  * [Save and Restore FrameRect](#save-and-restore-framerect)\n  * [Color](#color)\n  * [Stroke Weight and Handle Size](#stroke-weight-and-handle-size)\n  * [Handle Touch Padding](#handle-touch-padding)\n  * [Handle and Guide ShowMode](#handle-and-guide-showmode)\n  * [Animation](#animation)\n* [Picasso and Glide Compatibility](#picasso-and-glide-compatibility)\n* [Debug](#debug)\n* [XML Attributes](#xml-attributes) \n* [For Xamarin](#for-xamarin)\n* [Developed By](#developed-by)\n* [Users](#users) \n* [License](#license) \n\n## Download\nInclude the following dependency in your `build.gradle` file. **Please use the latest version available.**\n\n```groovy\nrepositories {\n    jcenter()\n}\ndependencies {\n    compile 'com.isseiaoki:simplecropview:1.1.8'\n}\n```\n\n## Example\n\n### Image Cropping\n\nAdd permission in `AndroidManifest.xml` file.\n\n```xml\n\u003cuses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/\u003e\n```\n\nAdd the `com.isseiaoki.simplecropview.CropImageView` to your layout XML file.\n\n\u003e**NOTE:** The image is scaled to fit the size of the view by maintaining the aspect ratio. `WRAP_CONTENT` will be ignored.\n\n```xml       \n\n\u003ccom.isseiaoki.simplecropview.CropImageView\n    xmlns:custom=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cropImageView\"\n    android:layout_weight=\"1\"\n    android:paddingTop=\"16dp\"\n    android:paddingBottom=\"16dp\"\n    android:paddingLeft=\"16dp\"\n    android:paddingRight=\"16dp\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    custom:scv_crop_mode=\"fit_image\"\n    custom:scv_background_color=\"@color/windowBackground\"\n    custom:scv_handle_color=\"@color/colorAccent\"\n    custom:scv_guide_color=\"@color/colorAccent\"\n    custom:scv_overlay_color=\"@color/overlay\"\n    custom:scv_frame_color=\"@color/colorAccent\"\n    custom:scv_handle_size=\"14dp\"\n    custom:scv_touch_padding=\"8dp\"\n    custom:scv_handle_show_mode=\"show_always\"\n    custom:scv_guide_show_mode=\"show_always\"\n    custom:scv_min_frame_size=\"50dp\"\n    custom:scv_frame_stroke_weight=\"1dp\"\n    custom:scv_guide_stroke_weight=\"1dp\"/\u003e\n\n```\n\nLoad image from sourceUri.\n\n```java\n\nmCropView = (CropImageView) findViewById(R.id.cropImageView);\n\nmCropView.load(sourceUri).execute(mLoadCallback);\n```\n\nwith RxJava,\n\n```\nmCropView.load(sourceUri).executeAsCompletable();\n```\n\nCrop image and save cropped bitmap in saveUri.\n\n```java\nmCropView.crop(sourceUri)\n    .execute(new CropCallback() {\n  @Override public void onSuccess(Bitmap cropped) {\n    mCropView.save(cropped)\n        .execute(saveUri, mSaveCallback);\n  }\n\n  @Override public void onError(Throwable e) {\n  }\n});\n```\n\nwith RxJava,\n\n```\nmCropView.crop(sourceUri)\n    .executeAsSingle()\n    .flatMap(new Function\u003cBitmap, SingleSource\u003cUri\u003e\u003e() {\n      @Override public SingleSource\u003cUri\u003e apply(@io.reactivex.annotations.NonNull Bitmap bitmap)\n              throws Exception {\n        return mCropView.save(bitmap)\n            .executeAsSingle(saveUri);\n      }\n    })\n    .subscribeOn(Schedulers.newThread())\n    .observeOn(AndroidSchedulers.mainThread())\n    .subscribe(new Consumer\u003cUri\u003e() {\n      @Override public void accept(@io.reactivex.annotations.NonNull Uri uri) throws Exception {\n        // on success\n      }\n    }, new Consumer\u003cThrowable\u003e() {\n      @Override public void accept(@io.reactivex.annotations.NonNull Throwable throwable)\n              throws Exception {\n        // on error\n      }\n    });\n```\n\n### Image Rotation\n\n![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/1.1.0/demo_rotation.gif)\n\nSimpleCropView supports rotation by 90 degrees.\n\n```java\n\ncropImageView.rotateImage(CropImageView.RotateDegrees.ROTATE_90D); // rotate clockwise by 90 degrees\ncropImageView.rotateImage(CropImageView.RotateDegrees.ROTATE_M90D); // rotate counter-clockwise by 90 degrees\n\n```\n\n**For a working implementation of this project, see [sample project](https://github.com/IsseiAoki/SimpleCropView/tree/master/simplecropview-sample).**\n\n## Load Image\n\n* `load(sourceUri).execute(mLoadCallback);`\n\nwith RxJava,\n\n* `load(sourceUri).executeAsCompletable();`\n\nThese method load Bitmap in efficient size from sourceUri. \nYou don't have to care for filePath and image size.\nYou can also use `Picasso` or `Glide`.\n\n### Apply Thumbnail\nYou can use blurred image for placeholder.\n\n```\nmCropView.load(result.getData())\n         .useThumbnail(true)\n         .execute(mLoadCallback);\n```\n\n## Crop and Save Image\n\n```java\nmCropView.crop(sourceUri)\n    .execute(new CropCallback() {\n  @Override public void onSuccess(Bitmap cropped) {\n    mCropView.save(cropped)\n        .execute(saveUri, mSaveCallback);\n  }\n\n  @Override public void onError(Throwable e) {\n  }\n});\n```\n\nwith RxJava,\n\n```\nmCropView.crop(sourceUri)\n    .executeAsSingle()\n    .flatMap(new Function\u003cBitmap, SingleSource\u003cUri\u003e\u003e() {\n      @Override public SingleSource\u003cUri\u003e apply(@io.reactivex.annotations.NonNull Bitmap bitmap)\n              throws Exception {\n        return mCropView.save(bitmap)\n                .executeAsSingle(saveUri);\n      }\n    })\n    .subscribeOn(Schedulers.newThread())\n    .observeOn(AndroidSchedulers.mainThread())\n    .subscribe(new Consumer\u003cUri\u003e() {\n      @Override public void accept(@io.reactivex.annotations.NonNull Uri uri) throws Exception {\n        // on success\n      }\n    }, new Consumer\u003cThrowable\u003e() {\n      @Override public void accept(@io.reactivex.annotations.NonNull Throwable throwable)\n              throws Exception {\n        // on error\n      }\n    });\n```\n\nThese cropping method use full size bitmap taken from `sourceUri` for cropping. \nIf `sourceUri` is null, the Uri set in load(Uri) is used.\nAfter cropping, it saves cropped image in `saveUri`.\n\n### Compress Format\n\nYou can use 3 compress format, `PNG`(default),`JPEG`, and `WEBP`.\n\n```java\nsetCompressFormat(Bitmap.CompressFormat.JPEG);\n```\n\n### Compress Quality\nYou can also set compress quality. `0`~`100`(default)\n\n```java\nsetCompressQuality(90);\n```\n\n## Customization\n\n[![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/thumbnails/thumb1.jpg)](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/showcase1.jpg)\n[![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/thumbnails/thumb3.jpg)](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/showcase3.jpg)\n[![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/thumbnails/thumb4.jpg)](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/showcase4.jpg)\n[![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/thumbnails/thumb5.jpg)](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/showcase5.jpg)\n[![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/thumbnails/thumb6.jpg)](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/showcase6.jpg)\n[![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/thumbnails/thumb7.jpg)](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/device-art/showcase7.jpg)\n\n### Maximum Output Size\nYou can set max size for output image. The output image will be scaled within given rect.\n\n```java\nsetOutputMaxSize(300, 300);\n```\n\n### Fixed Output Size\nYou can also set fixed output width/height. \n\n```java\nsetOutputWidth(100); // If cropped image size is 400x200, output size is 100x50\n``` \n\n```java\nsetOutputHeight(100); // If cropped image size is 400x200, output size is 200x100\n``` \n\n### CropMode\n\nThe option for the aspect ratio of the image cropping frame.\n\n```java\nCropImageView cropImageView = (CropImageView)findViewById(R.id.cropImageView);\ncropImageView.setCropMode(CropImageView.CropMode.RATIO_16_9);\n```\n\n#### Values\n```\nFIT_IMAGE, RATIO_4_3, RATIO_3_4, SQUARE(default), RATIO_16_9, RATIO_9_16, FREE, CUSTOM, CIRCLE, CIRCLE_SQUARE\n```\n#### Rect Crop\n`FREE`:  *Non-Fixed aspect ratio mode*\n`RATIO_X_Y`, `SQUARE`:  *Fixed aspect ratio mode*\n`FIT_IMAGE`:  *Fixed aspect ratio mode. The same aspect ratio as the original photo.*\n\nIf you need other aspect ratio, use `setCustomRatio(int ratioX, int ratioY);`\n\n![demo](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/1.1.0/demo_crop_mode_rect.gif)\n\n\n#### Circle Crop\n\n`CIRCLE`: *Fixed aspect ratio mode. Crop image as circle.*\n`CIRCLE_SQUARE`: *Fixed aspect ratio mode. Show guide circle, but save as square.(`getRectBitmap()` is removed.)*\n\n\n![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/1.1.0/demo_crop_mode_circle.gif)\n\n\n### MinimumFrameSize\nThe minimum size of the image cropping frame in dp.(default:50)\n\n```java\nCropImageView cropImageView = (CropImageView)findViewById(R.id.cropImageView);\ncropImageView.setMinFrameSizeInDp(100);\n```\n\n![demo](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/gif/demo_minimum_frame_size.gif)\n\n### InitialFrameScale\nThe initial frame size of the image cropping frame. `0.01`~`1.0`(default)\n\n```java\nCropImageView cropImageView = (CropImageView)findViewById(R.id.cropImageView);\ncropImageView.setInitialFrameScale(1.0f);\n```\n\n| scale | Appearance |\n|:-------------:|:-----:|\n| 0.5 | \u003cimg src=\"https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/1.0.8/initial_frame_scale_0.5.jpg\" width=\"100%\"\u003e |\n| 0.75| \u003cimg src=\"https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/1.0.8/initial_frame_scale_0.75.jpg\" width=\"100%\"\u003e |\n| 1.0 (default)| \u003cimg src=\"https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/1.0.8/initial_frame_scale_1.0.jpg\" width=\"100%\"\u003e |\n\n### Save and Restore FrameRect\nYou can save and restore frame rect as follows. See [sample project](https://github.com/IsseiAoki/SimpleCropView/tree/master/simplecropview-sample) for more details.\n\n* Save FrameRect\n\n```\nmCropView.getActualCropRect()\n```\n\n* Restore FrameRect\n\n```\nmCropView.load(result.getData())\n         .initialFrameRect(mFrameRect)\n         .execute(mLoadCallback);\n```\n\n### Color\n\n```java\nCropImageView cropImageView = (CropImageView)findViewById(R.id.cropImageView);\ncropImageView.setBackgroundColor(0xFFFFFFFB);\ncropImageView.setOverlayColor(0xAA1C1C1C);\ncropImageView.setFrameColor(getResources().getColor(R.color.frame));\ncropImageView.setHandleColor(getResources().getColor(R.color.handle));\ncropImageView.setGuideColor(getResources().getColor(R.color.guide));\n```\n\n![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/graphic/color-attributes.png)\n\n### Stroke Weight and Handle Size\n\n```java\nCropImageView cropImageView = (CropImageView)findViewById(R.id.cropImageView);\ncropImageView.setFrameStrokeWeightInDp(1);\ncropImageView.setGuideStrokeWeightInDp(1);\ncropImageView.setHandleSizeInDp(getResources().getDimension(R.dimen.handle_size));\n```\n\n![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/graphic/size-attributes.png)\n\n### Handle Touch Padding\n\nAdditional touch area for the image cropping frame handle.\n\n```java\nCropImageView cropImageView = (CropImageView)findViewById(R.id.cropImageView);\ncropImageView.setTouchPadding(16);\n```\n\n![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/graphic/handle-touch-padding.png)\n\n### Handle and Guide ShowMode\n\n```java\nCropImageView cropImageView = (CropImageView)findViewById(R.id.cropImageView);\ncropImageView.setHandleShowMode(CropImageView.ShowMode.SHOW_ALWAYS);\ncropImageView.setGuideShowMode(CropImageView.ShowMode.SHOW_ON_TOUCH);\n```\n\n#### Values\n```\nSHOW_ALWAYS(default), NOT_SHOW, SHOW_ON_TOUCH\n```\n\n| Handle ShowMode | Guide ShowMode | Appearance |\n|:-------------:|:-------------:|:-----:|\n| SHOW_ALWAYS | SHOW_ALWAYS | \u003cimg src=\"https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/graphic/show_handle_and_guide.jpg\" width=\"100%\"\u003e |\n| NOT_SHOW | NOT_SHOW | \u003cimg src=\"https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/graphic/not_show_handle_and_guide.jpg\" width=\"100%\"\u003e |\n| SHOW_ALWAYS | NOT_SHOW | \u003cimg src=\"https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/graphic/show_handle_only.jpg\" width=\"100%\"\u003e |\n| SHOW_ALWAYS | SHOW_ON_TOUCH | \u003cimg src=\"https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/gif/demo_guide_show_on_touch.gif\" width=\"100%\"\u003e |\n| SHOW_ON_TOUCH | NOT_SHOW | \u003cimg src=\"https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/gif/demo_handle_show_on_touch.gif\" width=\"100%\"\u003e |\n\n### Animation\nSimpleCropView supports rotate animation and frame change animation.\n\n#### Enabled\nToggle whether to animate. `true` is default.\n\n```java\nsetAnimationEnabled(true);\n```\n\n#### Duration\nSet animation duration in milliseconds. `100` is default.\n\n```java\nsetAnimationDuration(200);\n```\n\n#### Interpolator\nSet interpolator of animation. `DecelerateInterpolator` is default.\nYou can also use your custom interpolator.\n\n```java\nsetInterpolator(new AccelerateDecelerateInterpolator());\n```\n\n## Picasso and Glide Compatibility\n`com.isseiaoki.simplecropview.CropImageView` is a kind of `ImageView`.\nYou can use it with Picasso or Glide as follows:\n\n```java\nCropImageView cropImageView = (CropImageView)findViewById(R.id.cropImageView);\nPicasso.with(context).load(imageUrl).into(cropImageView);\n```\nor\n\n```java\nCropImageView cropImageView = (CropImageView)findViewById(R.id.cropImageView);\nGlide.with(context).load(imageUrl).into(cropImageView);\n```\n\n\u003eSome option does not work correctly because CropImageView does not support ImageView.ScaleType.\n\n## Debug\nYou can use debug display.\n\n![](https://raw.github.com/wiki/IsseiAoki/SimpleCropView/images/1.1.0/demo_debug.gif)\n\n```java\nsetDebug(true);\n```\n\n## XML Attributes\nXML sample here.\n\n```xml\n\u003ccom.isseiaoki.simplecropview.CropImageView\n    xmlns:custom=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/cropImageView\"\n    android:layout_weight=\"1\"\n    android:paddingTop=\"16dp\"\n    android:paddingBottom=\"16dp\"\n    android:paddingLeft=\"16dp\"\n    android:paddingRight=\"16dp\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    custom:scv_img_src=\"@drawable/sample5\"\n    custom:scv_crop_mode=\"fit_image\"\n    custom:scv_background_color=\"@color/windowBackground\"\n    custom:scv_overlay_color=\"@color/overlay\"\n    custom:scv_frame_color=\"@color/colorAccent\"\n    custom:scv_handle_color=\"@color/colorAccent\"\n    custom:scv_guide_color=\"@color/colorAccent\"\n    custom:scv_guide_show_mode=\"show_always\"\n    custom:scv_handle_show_mode=\"show_always\"\n    custom:scv_handle_size=\"14dp\"\n    custom:scv_touch_padding=\"8dp\"\n    custom:scv_min_frame_size=\"50dp\"\n    custom:scv_frame_stroke_weight=\"1dp\"\n    custom:scv_guide_stroke_weight=\"1dp\"\n    custom:scv_crop_enabled=\"true\"\n    custom:scv_initial_frame_scale=\"1.0\"\n    custom:scv_animation_enabled=\"true\"\n    custom:scv_animation_duration=\"200\"\n    custom:scv_handle_shadow_enabled=\"true\"/\u003e\n```\n\n| XML Attribute\u003cbr\u003e(custom:) | Related Method | Description |\n|:---|:---|:---|\n| scv_img_src | setImageResource(int resId) | Set source image. |\n| scv_crop_mode | setCropMode(CropImageView.CropMode mode) | Set crop mode. |\n| scv_background_color | setBackgroundColor(int bgColor) | Set view background color. |\n| scv_overlay_color | setOverlayColor(int overlayColor) | Set image overlay color. |\n| scv_frame_color | setFrameColor(int frameColor) | Set the image cropping frame color. |\n| scv_handle_color | setHandleColor(int frameColor) | Set the handle color. |\n| scv_guide_color | setGuideColor(int frameColor) | Set the guide color. |\n| scv_guide_show_mode | setGuideShowMode(CropImageView.ShowMode mode) | Set guideline show mode. |\n| scv_handle_show_mode | setHandleShowMode(CropImageView.ShowMode mode) | Set handle show mode. |\n| scv_handle_size | setHandleSizeInDp(int handleDp) | Set handle radius in density-independent pixels. |\n| scv_touch_padding | setTouchPaddingInDp(int paddingDp) | Set the image cropping frame handle touch padding(touch area) in density-independent pixels. |\n| scv_min_frame_size | setMinFrameSizeInDp(int minDp) | Set the image cropping frame minimum size in density-independent pixels. |\n| scv_frame_stroke_weight | setFrameStrokeWeightInDp(int weightDp) | Set frame stroke weight in density-independent pixels. |\n| scv_guide_stroke_weight | setGuideStrokeWeightInDp(int weightDp) | Set guideline stroke weight in density-independent pixels. |\n| scv_crop_enabled | setCropEnabled(boolean enabled) | Set whether to show the image cropping frame. |\n| scv_initial_frame_scale | setInitialFrameScale(float initialScale) | Set Set initial scale of the frame.(0.01 ~ 1.0) |\n| scv_animation_enabled | setAnimationEnabled(boolean enabled) | Set whether to animate. |\n| scv_animation_duration | setAnimationDuration(int durationMillis) | Set animation duration. |\n| scv_handle_shadow_enabled | setHandleShadowEnabled(boolean handleShadowEnabled) | Set whether to show handle shadows. |\n\n## Developed By\nIssei Aoki - \u003ci.greenwood.dev@gmail.com\u003e\n \n## Users\n* [Snipping Tool - Screen Capture](https://play.google.com/store/apps/details?id=com.anhlt.sniptool)\n\nIf you are using my library, please let me know your app name : )\n\n## For Xamarin\n[https://bitbucket.org/markjackmilian/xam.droid.simplecropview](https://bitbucket.org/markjackmilian/xam.droid.simplecropview)\n\nThanks a million to Marco!!!\n\n## License\n```\nThe MIT License (MIT)\n\nCopyright (c) 2015 Issei Aoki\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n","funding_links":[],"categories":["Index `(light-weight pages)`","Index","图片"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIsseiAoki%2FSimpleCropView","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FIsseiAoki%2FSimpleCropView","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIsseiAoki%2FSimpleCropView/lists"}