• Stars
    star
    2,228
  • Rank 20,693 (Top 0.5 %)
  • Language
    Java
  • Created over 7 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

πŸ“ Configurable Custom Crop widget for Android

CropIwa

Made in SteelKiwi Android Arsenal

The library is a highly configurable widget for image cropping.

GifSample1

Gradle

Add this into your dependencies block.

compile 'com.steelkiwi:cropiwa:1.0.3'

Sample

Please see the sample app for library usage examples.

Wiki

The library has a modular architecture, which makes it highly configurable. For info on how to configure CropIwaView refer to the sections below.

One of the useful features is that you don't have to wait for a result - after crop request is done, simply switch to another screen and wait for the result in a form of broadcast.

Usage:

Add CropIwa to your xml:

<com.steelkiwi.cropiwa.CropIwaView
  android:id="@+id/crop_view"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />

Image saving

cropView.crop(new CropIwaSaveConfig.Builder(destinationUri)
  .setCompressFormat(Bitmap.CompressFormat.PNG)
  .setSize(outWidth, outHeight) //Optional. If not specified, SRC dimensions will be used
  .setQuality(100) //Hint for lossy compression formats
  .build());

Callbacks

Cropped region saved callback. When crop request completes, a broadcast is sent. You can either listen to it using the CropIwaView intance

cropView.setCropSaveCompleteListener(bitmapUri -> {
  //Do something
});

cropView.setErrorListener(error -> {
  //Do something
});

or work directly with a broadcast receiver. The advantage is that it can be used from any part of the app, where you have an access to Context.

CropIwaResultReceiver resultReceiver = new CropIwaResultReceiver();
resultReceiver.setListener(resultListener);
resultReceiver.register(context);

//Don't forget to unregister it when you are done
resultReceiver.unregister(context);

You can subscribe for changes in CropIwaViews configs. Listeners will be notified anytime .apply() is called.

cropIwaView.configureOverlay().addConfigChangeListener(listener);
cropIwaView.configureImage().addConfigChangeListener(listener)

Basic View Configuration

  • Enable user to resize a crop area. Default is true.
app:ci_dynamic_aspect_ratio="true|false"

cropView.configureOverlay()
  .setDynamicCrop(enabled)
  .apply();
  • Draw a 3x3 grid. Default is true.
app:ci_draw_grid="true|false"

cropView.configureOverlay()
  .setShouldDrawGrid(draw)
  .apply();
  • Set an initial crop area's aspect ratio.
app:ci_aspect_ratio_w="16"
app:ci_aspect_ratio_h="9"

cropView.configureOverlay()
  .setAspectRatio(new AspectRatio(16, 9))
  .setAspectRatio(AspectRatio.IMG_SRC) //If you want crop area to be equal to the dimensions of an image
  .apply();
  • Initial image position. Behavior is similar to ImageView's scaleType.
app:ci_initial_position="centerCrop|centerInside"

cropView.configureImage()
  .setImageInitialPosition(position)
  .apply();
  • Set current scale of the image.
//Value is a float from 0.01f to 1
cropIwaView.configureImage()
  .setScale(scale)
  .apply();
  • Enable pinch gesture to scale an image.
app:ci_scale_enabled="true|false"

cropView.configureImage()
  .setImageScaleEnabled(enabled)
  .apply();
  • Enable finger drag to translate an image.
app:ci_translation_enabled="true|false"

cropView.configureImage()
  .setImageTranslationEnabled(enabled)
  .apply();
  • Choosing from default crop area shapes. Default is rectangle.
app:ci_crop_shape="rectangle|oval"

cropView.configureOverlay()
  .setCropShape(new CropIwaRectShape(cropView.configureOverlay()))
  .setCropShape(new CropIwaOvalShape(cropView.configureOverlay()))
  .apply();
  • You can set a min-max scale. Default min is 0.7, default max is 3.
app:ci_max_scale="1f"

cropView.configureImage()
  .setMinScale(minScale)
  .setMaxScale(maxScale)
  .apply();
  • Crop area min size.
app:ci_min_crop_width="40dp"
app:ci_min_crop_height="40dp"

cropView.configureOverlay()
  .setMinWidth(dps)
  .setMinHeight(dps)
  .apply();
  • Dimensions.
app:ci_border_width="1dp"
app:ci_corner_width="1dp"
app:ci_grid_width="1dp"

cropView.configureOverlay()
  .setBorderStrokeWidth(dps)
  .setCornerStrokeWidth(dps)
  .setGridStrokeWidth(dps)
  .apply();
  • Colors.
app:ci_border_color="#fff"
app:ci_corner_color="#fff"
app:ci_grid_color="#fff"
app:ci_overlay_color="#fff"

cropView.configureOverlay()
  .setBorderColor(Color.WHITE)
  .setCornerColor(Color.WHITE)
  .setGridColor(Color.WHITE)
  .setOverlayColor(Color.WHITE)
  .apply();

Advanced View Configuration

You can work directly with Paint objects. This gives you an ability, for example, to draw a grid with dashed effect.

Paint gridPaint = cropView.configureOverlay()
  .getCropShape()
  .getGridPaint();
gridPaint.setPathEffect(new DashPathEffect(new float[] {interval, interval}, 0));

You can obtain other Paints in the same way.

CropIwaOverlayConfig config = cropView.configureOverlay();
CropIwaShape shape = config.getCropShape();
shape.getGridPaint();
shape.getBorderPaint();
shape.getCornerPaint();

You can also create custom crop area shapes. Just extend CropIwaShape (for an example refer to CropIwaOvalShape) and set an instance of you class using:

cropView.configureOverlay()
  .setCropShape(new MyAwesomeShape())
  .apply();

License

Copyright Β© 2017 SteelKiwi, http://steelkiwi.com

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Repositories

1

AndroidRecording

Android Recording library offers convenient tools for audio/video recording and playback
Java
418
star
2

IncrementProductView

Interesting concept of products incrementation
Java
259
star
3

SeparateShapesView

Simple custom ViewGroup with two shapes inside and simple scale animation
Java
248
star
4

SlidingSquareLoaderView

Marvelous sliding square loader view
Kotlin
179
star
5

Getting-started-with-Kotlin

πŸš€ How to use Kotlin with popular Android libraries
Kotlin
145
star
6

BadgeHolderView

ViewGroup for browse badge view with count of some products
Java
66
star
7

DotsLoaderView

Simple dots loader view
Java
66
star
8

aiohttp_test_chat

Simple aiohttp test chat
Python
58
star
9

django-skd-smoke

This package is intended for simplification of smoke tests creation
Python
48
star
10

libGDX-Path-Editor

libGDX Path Editor lets you easily create complex pathes your game characters can move along.
Java
44
star
11

locust-bokeh-load-test

Python
41
star
12

IndicatorView

Configurable view for ViewPager
Java
40
star
13

jwt-python-tutorial

Example repo for JWT in Python tutorial
Python
25
star
14

VideoFramingDemo

This is a simple demo which works with Android's MediaMetadataRetriever class to extract frames from video file
Java
22
star
15

ListView-Swipe-to-Delete

ListView Swipe to Delete is an Android library which offers a list view navigation mode similar to Any.do application
Java
20
star
16

CenteredContentButton

Centered Content Button is Android library which contains button-like and toggle button-like components with centered content - icon and/or text.
Java
16
star
17

ErrorLayout

Simple layout to show custom error toast with animation
Java
13
star
18

collection_in_kotlin

πŸ“– Collections in Kotlin for Android developers
Kotlin
13
star
19

SketchView

SketchView library provides a custom implementation of a canvas on which user can draw via gestures
Java
13
star
20

django-skd-tools

Python
11
star
21

PullRefreshLayout

Simple custom view pull to refresh
Java
9
star
22

SKLocalizable

Localization add-on for native iOS components
Swift
8
star
23

django-template

Python
8
star
24

django-singleton-tutorial

Example repo for Singleton model in Django tutorial. http://steelkiwi.com/blog/practical-application-singleton-design-pattern/
Python
7
star
25

ErrorParser

Simple JSON parser for Android
Java
7
star
26

django_aiohttp_websockets

Example Django-project with Websocket's chat written using aioHTTP and aioRedis
Python
6
star
27

Android-Image-Worker-Library

Android library that helps you downloading and storing images.
Java
6
star
28

SKExtensions

Common used Extensions in Swift
Swift
5
star
29

NavigationTools

Java
4
star
30

emacs.d

Emacs configuration for working with Python
Emacs Lisp
4
star
31

SoundCloudAuthentificator

Swift
3
star
32

django-steelkiwi-project

project template
Python
3
star
33

hunting-kiwi

πŸ”« Simple ERP system for HR managers
JavaScript
2
star
34

exchange_rates

Crypto currencies exchange rates flutter redux sample project for uamobile 2019
Dart
2
star
35

ErrorParse-ios

Parser class for error text retrieving
Swift
2
star
36

js-helpers

JavaScript
2
star
37

angular1-boilerplate

Boilerplate for Angular 1 on es6-modules
JavaScript
2
star
38

spa-battle

Small SPA implemented with most popular front-end frameworks
HTML
2
star
39

SKChart

Swift
1
star
40

AppDelegate-Firebase

Example of using Firebase PushMessages in iOS
Swift
1
star
41

django-knowledge

Python
1
star