From c0ab4282d9b6a38f07199925be32926727ee0eb9 Mon Sep 17 00:00:00 2001 From: wasabeef Date: Thu, 23 Apr 2015 12:40:15 +0900 Subject: [PATCH] add CropType(Top, Center, Bottom) for CropTransformation --- .../wasabeef/example/glide/MainActivity.java | 4 ++- .../wasabeef/example/glide/MainAdapter.java | 14 ++++++-- .../transformations/CropTransformation.java | 33 +++++++++++++++++-- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/example/src/main/java/jp/wasabeef/example/glide/MainActivity.java b/example/src/main/java/jp/wasabeef/example/glide/MainActivity.java index 9b26299..06a02ff 100644 --- a/example/src/main/java/jp/wasabeef/example/glide/MainActivity.java +++ b/example/src/main/java/jp/wasabeef/example/glide/MainActivity.java @@ -22,7 +22,9 @@ public class MainActivity extends ActionBarActivity { recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); List dataSet = new ArrayList<>(); - dataSet.add(Type.Crop); + dataSet.add(Type.CropTop); + dataSet.add(Type.CropCenter); + dataSet.add(Type.CropBottom); dataSet.add(Type.CropSquare); dataSet.add(Type.CropCircle); dataSet.add(Type.ColorFilter); diff --git a/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java b/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java index c6770e1..c6af123 100644 --- a/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java +++ b/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java @@ -45,7 +45,9 @@ public class MainAdapter extends RecyclerView.Adapter { private BitmapPool mPool; enum Type { - Crop, + CropTop, + CropCenter, + CropBottom, CropSquare, CropCircle, ColorFilter, @@ -81,9 +83,17 @@ public class MainAdapter extends RecyclerView.Adapter { public void onBindViewHolder(MainAdapter.ViewHolder holder, int position) { Transformation transformation = null; switch (mDataSet.get(position)) { - case Crop: + case CropTop: + transformation = + new CropTransformation(mPool, 300, 100, CropTransformation.CropType.TOP); + break; + case CropCenter: transformation = new CropTransformation(mPool, 300, 100); break; + case CropBottom: + transformation = + new CropTransformation(mPool, 300, 100, CropTransformation.CropType.BOTTOM); + break; case CropSquare: transformation = new CropSquareTransformation(mPool); break; diff --git a/transformations/src/main/java/jp/wasabeef/glide/transformations/CropTransformation.java b/transformations/src/main/java/jp/wasabeef/glide/transformations/CropTransformation.java index 4b1e235..1c9b877 100644 --- a/transformations/src/main/java/jp/wasabeef/glide/transformations/CropTransformation.java +++ b/transformations/src/main/java/jp/wasabeef/glide/transformations/CropTransformation.java @@ -31,6 +31,8 @@ public class CropTransformation implements Transformation { private int mWidth; private int mHeight; + private CropType mCropType = CropType.CENTER; + public CropTransformation(BitmapPool pool) { mBitmapPool = pool; } @@ -41,6 +43,13 @@ public class CropTransformation implements Transformation { mHeight = height; } + public CropTransformation(BitmapPool pool, int width, int height, CropType cropType) { + mBitmapPool = pool; + mWidth = width; + mHeight = height; + mCropType = cropType; + } + @Override public Resource transform(Resource resource, int outWidth, int outHeight) { Bitmap source = resource.get(); @@ -65,7 +74,7 @@ public class CropTransformation implements Transformation { float scaledWidth = scale * source.getWidth(); float scaledHeight = scale * source.getHeight(); float left = (mWidth - scaledWidth) / 2; - float top = (mHeight - scaledHeight) / 2; + float top = getTop(scaledHeight); RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight); Canvas canvas = new Canvas(bitmap); @@ -76,6 +85,26 @@ public class CropTransformation implements Transformation { @Override public String getId() { - return "CropTransformation(width=" + mWidth + ", height=" + mHeight + ")"; + return "CropTransformation(width=" + mWidth + ", height=" + mHeight + ", cropType=" + + mCropType + ")"; + } + + private float getTop(float scaledHeight) { + switch (mCropType) { + case TOP: + return 0; + case CENTER: + return (mHeight - scaledHeight) / 2; + case BOTTOM: + return mHeight - scaledHeight; + default: + return 0; + } + } + + public enum CropType { + TOP, + CENTER, + BOTTOM } }