From 5cf3e3d93422727ff145ccce4970a97e24350899 Mon Sep 17 00:00:00 2001 From: wasabeef Date: Wed, 16 Sep 2015 22:38:16 +0900 Subject: [PATCH] Refactor --- .../wasabeef/example/glide/MainAdapter.java | 21 ++-- .../transformations/MaskTransformation.java | 89 +++++++--------- .../NinePatchMaskTransformation.java | 100 +++++++----------- .../glide/transformations/internal/Util.java | 43 ++++++++ 4 files changed, 129 insertions(+), 124 deletions(-) create mode 100644 transformations/src/main/java/jp/wasabeef/glide/transformations/internal/Util.java 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 dc7b9ee..12c4d8b 100644 --- a/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java +++ b/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java @@ -9,13 +9,10 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; - import com.bumptech.glide.Glide; import com.bumptech.glide.load.Transformation; import com.bumptech.glide.load.resource.bitmap.CenterCrop; - import java.util.List; - import jp.wasabeef.glide.transformations.BlurTransformation; import jp.wasabeef.glide.transformations.ColorFilterTransformation; import jp.wasabeef.glide.transformations.CropCircleTransformation; @@ -84,18 +81,18 @@ public class MainAdapter extends RecyclerView.Adapter { case Mask: transformation = new MaskTransformation(mContext, R.drawable.mask210); Glide.with(mContext) - .load(R.drawable.demo) - .override(210, 210) - .bitmapTransform(new CenterCrop(mContext), transformation) - .into(holder.image); + .load(R.drawable.demo) + .override(210, 210) + .bitmapTransform(new CenterCrop(mContext), transformation) + .into(holder.image); break; case NinePatchMask: - transformation = new NinePatchMaskTransformation(mContext, R.drawable.chat_me_mask, 300, 300); + transformation = new NinePatchMaskTransformation(mContext, R.drawable.chat_me_mask); Glide.with(mContext) - .load(R.drawable.demo) - .override(300, 300) - .bitmapTransform(new CenterCrop(mContext), transformation) - .into(holder.image); + .load(R.drawable.demo) + .override(300, 300) + .bitmapTransform(new CenterCrop(mContext), transformation) + .into(holder.image); break; case CropTop: transformation = diff --git a/transformations/src/main/java/jp/wasabeef/glide/transformations/MaskTransformation.java b/transformations/src/main/java/jp/wasabeef/glide/transformations/MaskTransformation.java index 00eb5e6..d2bfbab 100644 --- a/transformations/src/main/java/jp/wasabeef/glide/transformations/MaskTransformation.java +++ b/transformations/src/main/java/jp/wasabeef/glide/transformations/MaskTransformation.java @@ -24,70 +24,55 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.os.Build; - import com.bumptech.glide.Glide; import com.bumptech.glide.load.Transformation; import com.bumptech.glide.load.engine.Resource; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapResource; +import jp.wasabeef.glide.transformations.internal.Util; public class MaskTransformation implements Transformation { - private Context mContext; - private BitmapPool mBitmapPool; - private int mMaskId; + private Context mContext; + private BitmapPool mBitmapPool; + private int mMaskId; - public MaskTransformation(Context context, int maskId) { - mBitmapPool = Glide.get(context).getBitmapPool(); - mContext = context; - mMaskId = maskId; + public MaskTransformation(Context context, int maskId) { + mBitmapPool = Glide.get(context).getBitmapPool(); + mContext = context; + mMaskId = maskId; + } + + @Override + public Resource transform(Resource resource, int outWidth, int outHeight) { + Bitmap source = resource.get(); + + int width = source.getWidth(); + int height = source.getHeight(); + + Bitmap mask = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + + Drawable drawable = Util.getMaskDrawable(mContext, mMaskId); + drawable.setBounds(0, 0, width, height); + Canvas canvas = new Canvas(mask); + drawable.draw(canvas); + + Bitmap bitmap = mBitmapPool.get(width, height, Bitmap.Config.ARGB_8888); + if (bitmap == null) { + bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); } - @Override - public Resource transform(Resource resource, int outWidth, int outHeight) { - Bitmap source = resource.get(); + Paint paint = new Paint(); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); - boolean maskFromBitmapPool = true; - Bitmap mask = mBitmapPool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); - if (mask == null) { - maskFromBitmapPool = false; - mask = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); - } + canvas = new Canvas(bitmap); + canvas.drawBitmap(mask, new Rect(0, 0, width, height), new Rect(0, 0, width, height), null); + canvas.drawBitmap(source, 0, 0, paint); - Drawable drawable; - if (Build.VERSION.SDK_INT >= 21) { - drawable = mContext.getDrawable(mMaskId); - } else { - drawable = mContext.getResources().getDrawable(mMaskId); - } - drawable.setBounds(0, 0, source.getWidth(), source.getHeight()); - Canvas canvas = new Canvas(mask); - drawable.draw(canvas); - - Bitmap bitmap = mBitmapPool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); - if (bitmap == null) { - bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); - } - - Paint paint = new Paint(); - paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); - - canvas = new Canvas(bitmap); - canvas.drawBitmap(mask, new Rect(0, 0, mask.getWidth(), mask.getHeight()), new Rect(0, 0, - source.getWidth(), source.getHeight()), null); - canvas.drawBitmap(source, 0, 0, paint); - - if (maskFromBitmapPool) { - mBitmapPool.put(mask); - } - - return BitmapResource.obtain(bitmap, mBitmapPool); - } - - @Override - public String getId() { - return "MaskTransformation(maskId=" + mMaskId + ")"; - } + return BitmapResource.obtain(bitmap, mBitmapPool); + } + @Override public String getId() { + return "MaskTransformation(maskId=" + mMaskId + ")"; + } } diff --git a/transformations/src/main/java/jp/wasabeef/glide/transformations/NinePatchMaskTransformation.java b/transformations/src/main/java/jp/wasabeef/glide/transformations/NinePatchMaskTransformation.java index b7d3b53..6184034 100644 --- a/transformations/src/main/java/jp/wasabeef/glide/transformations/NinePatchMaskTransformation.java +++ b/transformations/src/main/java/jp/wasabeef/glide/transformations/NinePatchMaskTransformation.java @@ -24,79 +24,59 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.os.Build; - import com.bumptech.glide.Glide; import com.bumptech.glide.load.Transformation; import com.bumptech.glide.load.engine.Resource; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapResource; import com.bumptech.glide.request.target.Target; +import jp.wasabeef.glide.transformations.internal.Util; public class NinePatchMaskTransformation implements Transformation { - private Context mContext; - private BitmapPool mBitmapPool; - private int mMaskId; - private int mWidth; - private int mHeight; + private Context mContext; + private BitmapPool mBitmapPool; + private int mMaskId; - public NinePatchMaskTransformation(Context context, int maskId, int width, int height) { - mBitmapPool = Glide.get(context).getBitmapPool(); - mContext = context; - mMaskId = maskId; - mWidth = width; - mHeight = height; + public NinePatchMaskTransformation(Context context, int maskId) { + mBitmapPool = Glide.get(context).getBitmapPool(); + mContext = context; + mMaskId = maskId; + } + + @Override + public Resource transform(Resource resource, int outWidth, int outHeight) { + Bitmap source = resource.get(); + + int width = source.getWidth(); + int height = source.getHeight(); + int maskWidth = outWidth == Target.SIZE_ORIGINAL ? width : outWidth; + int maskHeight = outHeight == Target.SIZE_ORIGINAL ? height : outHeight; + + Bitmap mask = Bitmap.createBitmap(maskWidth, maskHeight, Bitmap.Config.ARGB_8888); + + Drawable drawable = Util.getMaskDrawable(mContext, mMaskId); + drawable.setBounds(0, 0, maskWidth, maskHeight); + Canvas canvas = new Canvas(mask); + drawable.draw(canvas); + + Bitmap bitmap = mBitmapPool.get(width, height, Bitmap.Config.ARGB_8888); + if (bitmap == null) { + bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); } - @Override - public Resource transform(Resource resource, int outWidth, int outHeight) { - Bitmap source = resource.get(); + Paint paint = new Paint(); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); - int width = outWidth == Target.SIZE_ORIGINAL ? source.getWidth() : outWidth; - int height = outHeight == Target.SIZE_ORIGINAL ? source.getHeight() : outHeight; + canvas = new Canvas(bitmap); + canvas.drawBitmap(mask, new Rect(0, 0, maskWidth, maskHeight), new Rect(0, 0, width, height), + null); + canvas.drawBitmap(source, 0, 0, paint); - boolean maskFromBitmapPool = true; - Bitmap mask = mBitmapPool.get(width, height, Bitmap.Config.ARGB_8888); - if (mask == null) { - maskFromBitmapPool = false; - mask = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - } - - Drawable drawable; - if (Build.VERSION.SDK_INT >= 21) { - drawable = mContext.getDrawable(mMaskId); - } else { - drawable = mContext.getResources().getDrawable(mMaskId); - } - drawable.setBounds(0, 0, width, height); - Canvas canvas = new Canvas(mask); - drawable.draw(canvas); - - Bitmap bitmap = mBitmapPool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); - if (bitmap == null) { - bitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); - } - - Paint paint = new Paint(); - paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); - - canvas = new Canvas(bitmap); - canvas.drawBitmap(mask, new Rect(0, 0, mask.getWidth(), mask.getHeight()), new Rect(0, 0, - source.getWidth(), source.getHeight()), null); - canvas.drawBitmap(source, 0, 0, paint); - - if (maskFromBitmapPool) { - mBitmapPool.put(mask); - } - - return BitmapResource.obtain(bitmap, mBitmapPool); - } - - @Override - public String getId() { - return "NinePatchMaskTransformation(mMaskId=" + mMaskId - + ", width=" + mWidth + ", height=" + mHeight + ")"; - } + return BitmapResource.obtain(bitmap, mBitmapPool); + } + @Override public String getId() { + return "NinePatchMaskTransformation(mMaskId=" + mMaskId + ")"; + } } diff --git a/transformations/src/main/java/jp/wasabeef/glide/transformations/internal/Util.java b/transformations/src/main/java/jp/wasabeef/glide/transformations/internal/Util.java new file mode 100644 index 0000000..075e494 --- /dev/null +++ b/transformations/src/main/java/jp/wasabeef/glide/transformations/internal/Util.java @@ -0,0 +1,43 @@ +package jp.wasabeef.glide.transformations.internal; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.os.Build; + +/** + * Copyright (C) 2015 Wasabeef + * + * 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. + */ + +public final class Util { + + private Util() { + // Utility class. + } + + public static Drawable getMaskDrawable(Context context, int maskId) { + Drawable drawable; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + drawable = context.getDrawable(maskId); + } else { + drawable = context.getResources().getDrawable(maskId); + } + + if (drawable == null) { + throw new IllegalArgumentException("maskId is invalid"); + } + + return drawable; + } +}