From cb3cd88ed2790cb585c6eb871a710c1c87899636 Mon Sep 17 00:00:00 2001 From: start141 <415043846@qq.com> Date: Thu, 17 Sep 2015 20:27:30 +0800 Subject: [PATCH 1/2] Optimize the code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Not to create the mask bitmap. 2. Adjust MaskTransformation’s getId()’s return. --- .../wasabeef/example/glide/MainAdapter.java | 1 - .../transformations/MaskTransformation.java | 42 +++++++++------- .../NinePatchMaskTransformation.java | 49 ++++++++++--------- 3 files changed, 48 insertions(+), 44 deletions(-) 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 59ea463..5826253 100644 --- a/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java +++ b/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java @@ -191,7 +191,6 @@ public class MainAdapter extends RecyclerView.Adapter { .bitmapTransform( new SwirlFilterTransformation(mContext, 0.5f, 1.0f, new PointF(0.5f, 0.5f))) .into(holder.image); - break; case Brightness: Glide.with(mContext) 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 d2bfbab..2eb859e 100644 --- a/transformations/src/main/java/jp/wasabeef/glide/transformations/MaskTransformation.java +++ b/transformations/src/main/java/jp/wasabeef/glide/transformations/MaskTransformation.java @@ -22,21 +22,32 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; import android.graphics.drawable.Drawable; + 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 static Paint mMaskingPaint = new Paint(); private Context mContext; private BitmapPool mBitmapPool; private int mMaskId; + static { + mMaskingPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + } + + /** + * @param maskId If you change the mask file, please rename the mask file, or Glide will get the + * cache with the old mask. Because getId() will return the same values if using the + * same make file name. If you have a good idea please tell we, thanks. + */ public MaskTransformation(Context context, int maskId) { mBitmapPool = Glide.get(context).getBitmapPool(); mContext = context; @@ -46,33 +57,26 @@ public class MaskTransformation implements Transformation { @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); + Bitmap result = mBitmapPool.get(width, height, Bitmap.Config.ARGB_8888); + if (result == null) { + result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); } - Paint paint = new Paint(); - paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + Drawable mask = Util.getMaskDrawable(mContext, mMaskId); - 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); + Canvas canvas = new Canvas(result); + mask.setBounds(0, 0, width, height); + mask.draw(canvas); + canvas.drawBitmap(source, 0, 0, mMaskingPaint); - return BitmapResource.obtain(bitmap, mBitmapPool); + return BitmapResource.obtain(result, mBitmapPool); } @Override public String getId() { - return "MaskTransformation(maskId=" + mMaskId + ")"; + return "MaskTransformation(maskId=" + + mContext.getResources().getResourceEntryName(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 6184034..280fbeb 100644 --- a/transformations/src/main/java/jp/wasabeef/glide/transformations/NinePatchMaskTransformation.java +++ b/transformations/src/main/java/jp/wasabeef/glide/transformations/NinePatchMaskTransformation.java @@ -22,22 +22,33 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; -import android.graphics.Rect; import android.graphics.drawable.Drawable; + 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 static Paint mMaskingPaint = new Paint(); private Context mContext; private BitmapPool mBitmapPool; private int mMaskId; + static { + mMaskingPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + } + + /** + * @param maskId If you change the mask file, please rename the mask file, or Glide will get the + * cache with the old mask. Because getId() will return the same values if using the + * same make file name. If you have a good idea please tell we, thanks. + */ public NinePatchMaskTransformation(Context context, int maskId) { mBitmapPool = Glide.get(context).getBitmapPool(); mContext = context; @@ -47,36 +58,26 @@ public class NinePatchMaskTransformation implements Transformation { @Override public Resource transform(Resource resource, int outWidth, int outHeight) { Bitmap source = resource.get(); + int width = outWidth == Target.SIZE_ORIGINAL ? source.getWidth() : outWidth; + int height = outHeight == Target.SIZE_ORIGINAL ? source.getHeight() : outHeight; - 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); + Bitmap result = mBitmapPool.get(width, height, Bitmap.Config.ARGB_8888); + if (result == null) { + result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); } - Paint paint = new Paint(); - paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + Drawable mask = Util.getMaskDrawable(mContext, mMaskId); - 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); + Canvas canvas = new Canvas(result); + mask.setBounds(0, 0, width, height); + mask.draw(canvas); + canvas.drawBitmap(source, 0, 0, mMaskingPaint); - return BitmapResource.obtain(bitmap, mBitmapPool); + return BitmapResource.obtain(result, mBitmapPool); } @Override public String getId() { - return "NinePatchMaskTransformation(mMaskId=" + mMaskId + ")"; + return "NinePatchMaskTransformation(mMaskId=" + + mContext.getResources().getResourceEntryName(mMaskId) + ")"; } } From d063aac6fa1c9bfb3f42444b9d7643b30a1987ec Mon Sep 17 00:00:00 2001 From: start141 <415043846@qq.com> Date: Fri, 18 Sep 2015 12:07:54 +0800 Subject: [PATCH 2/2] Merged NinePatchMaskTransformation to MaskTransformation 1.merged the NinePatchMaskTransformation to the maskTransformation. 2.replace mask resource. --- .../wasabeef/example/glide/MainAdapter.java | 17 ++-- .../java/jp/wasabeef/example/glide/Utils.java | 27 ++++++ .../src/main/res/drawable-xxhdpi/mask210.png | Bin 19153 -> 0 bytes ...at_me_mask.9.png => mask_chat_right.9.png} | Bin .../res/drawable-xxhdpi/mask_starfish.png | Bin 0 -> 7717 bytes .../transformations/MaskTransformation.java | 15 ++-- .../NinePatchMaskTransformation.java | 83 ------------------ .../internal/{Util.java => Utils.java} | 4 +- 8 files changed, 46 insertions(+), 100 deletions(-) create mode 100644 example/src/main/java/jp/wasabeef/example/glide/Utils.java delete mode 100644 example/src/main/res/drawable-xxhdpi/mask210.png rename example/src/main/res/drawable-xxhdpi/{chat_me_mask.9.png => mask_chat_right.9.png} (100%) create mode 100644 example/src/main/res/drawable-xxhdpi/mask_starfish.png delete mode 100644 transformations/src/main/java/jp/wasabeef/glide/transformations/NinePatchMaskTransformation.java rename transformations/src/main/java/jp/wasabeef/glide/transformations/internal/{Util.java => Utils.java} (96%) 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 5826253..8220cc8 100644 --- a/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java +++ b/example/src/main/java/jp/wasabeef/example/glide/MainAdapter.java @@ -19,7 +19,6 @@ import jp.wasabeef.glide.transformations.CropSquareTransformation; import jp.wasabeef.glide.transformations.CropTransformation; import jp.wasabeef.glide.transformations.GrayscaleTransformation; import jp.wasabeef.glide.transformations.MaskTransformation; -import jp.wasabeef.glide.transformations.NinePatchMaskTransformation; import jp.wasabeef.glide.transformations.RoundedCornersTransformation; import jp.wasabeef.glide.transformations.gpu.BrightnessFilterTransformation; import jp.wasabeef.glide.transformations.gpu.ContrastFilterTransformation; @@ -77,19 +76,23 @@ public class MainAdapter extends RecyclerView.Adapter { @Override public void onBindViewHolder(MainAdapter.ViewHolder holder, int position) { switch (mDataSet.get(position)) { case Mask: + int width = Utils.dip2px(mContext, 133.33f); + int height = Utils.dip2px(mContext, 126.33f); Glide.with(mContext) - .load(R.drawable.demo) - .override(210, 210) + .load(R.drawable.check) + .override(width, height) .bitmapTransform(new CenterCrop(mContext), - new MaskTransformation(mContext, R.drawable.mask210)) + new MaskTransformation(mContext, R.drawable.mask_starfish)) .into(holder.image); break; case NinePatchMask: + width = Utils.dip2px(mContext, 150.0f); + height = Utils.dip2px(mContext, 100.0f); Glide.with(mContext) - .load(R.drawable.demo) - .override(300, 300) + .load(R.drawable.check) + .override(width, height) .bitmapTransform(new CenterCrop(mContext), - new NinePatchMaskTransformation(mContext, R.drawable.chat_me_mask)) + new MaskTransformation(mContext, R.drawable.mask_chat_right)) .into(holder.image); break; case CropTop: diff --git a/example/src/main/java/jp/wasabeef/example/glide/Utils.java b/example/src/main/java/jp/wasabeef/example/glide/Utils.java new file mode 100644 index 0000000..6e0f24f --- /dev/null +++ b/example/src/main/java/jp/wasabeef/example/glide/Utils.java @@ -0,0 +1,27 @@ +package jp.wasabeef.example.glide; + +/** + * 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. + */ + +import android.content.Context; + +public class Utils { + + public static int dip2px(Context context, float dp) { + float scale = context.getResources().getDisplayMetrics().density; + return (int) (dp * scale + 0.5f); + } +} diff --git a/example/src/main/res/drawable-xxhdpi/mask210.png b/example/src/main/res/drawable-xxhdpi/mask210.png deleted file mode 100644 index f8d07578cc64acd94d2e992b18612d50300bbf45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19153 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 literal 0 HcmV?d00001 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 2eb859e..fff0b76 100644 --- a/transformations/src/main/java/jp/wasabeef/glide/transformations/MaskTransformation.java +++ b/transformations/src/main/java/jp/wasabeef/glide/transformations/MaskTransformation.java @@ -23,14 +23,12 @@ import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.drawable.Drawable; - 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; +import jp.wasabeef.glide.transformations.internal.Utils; public class MaskTransformation implements Transformation { @@ -44,9 +42,9 @@ public class MaskTransformation implements Transformation { } /** - * @param maskId If you change the mask file, please rename the mask file, or Glide will get the - * cache with the old mask. Because getId() will return the same values if using the - * same make file name. If you have a good idea please tell we, thanks. + * @param maskId If you change the mask file, please also rename the mask file, or Glide will get + * the cache with the old mask. Because getId() return the same values if using the + * same make file name. If you have a good idea please tell us, thanks. */ public MaskTransformation(Context context, int maskId) { mBitmapPool = Glide.get(context).getBitmapPool(); @@ -65,7 +63,7 @@ public class MaskTransformation implements Transformation { result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); } - Drawable mask = Util.getMaskDrawable(mContext, mMaskId); + Drawable mask = Utils.getMaskDrawable(mContext, mMaskId); Canvas canvas = new Canvas(result); mask.setBounds(0, 0, width, height); @@ -75,7 +73,8 @@ public class MaskTransformation implements Transformation { return BitmapResource.obtain(result, mBitmapPool); } - @Override public String getId() { + @Override + public String getId() { return "MaskTransformation(maskId=" + mContext.getResources().getResourceEntryName(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 deleted file mode 100644 index 280fbeb..0000000 --- a/transformations/src/main/java/jp/wasabeef/glide/transformations/NinePatchMaskTransformation.java +++ /dev/null @@ -1,83 +0,0 @@ -package jp.wasabeef.glide.transformations; - -/** - * 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. - */ - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffXfermode; -import android.graphics.drawable.Drawable; - -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 static Paint mMaskingPaint = new Paint(); - private Context mContext; - private BitmapPool mBitmapPool; - private int mMaskId; - - static { - mMaskingPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); - } - - /** - * @param maskId If you change the mask file, please rename the mask file, or Glide will get the - * cache with the old mask. Because getId() will return the same values if using the - * same make file name. If you have a good idea please tell we, thanks. - */ - 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 = outWidth == Target.SIZE_ORIGINAL ? source.getWidth() : outWidth; - int height = outHeight == Target.SIZE_ORIGINAL ? source.getHeight() : outHeight; - - Bitmap result = mBitmapPool.get(width, height, Bitmap.Config.ARGB_8888); - if (result == null) { - result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - } - - Drawable mask = Util.getMaskDrawable(mContext, mMaskId); - - Canvas canvas = new Canvas(result); - mask.setBounds(0, 0, width, height); - mask.draw(canvas); - canvas.drawBitmap(source, 0, 0, mMaskingPaint); - - return BitmapResource.obtain(result, mBitmapPool); - } - - @Override public String getId() { - return "NinePatchMaskTransformation(mMaskId=" - + mContext.getResources().getResourceEntryName(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/Utils.java similarity index 96% rename from transformations/src/main/java/jp/wasabeef/glide/transformations/internal/Util.java rename to transformations/src/main/java/jp/wasabeef/glide/transformations/internal/Utils.java index 075e494..2d34f2b 100644 --- a/transformations/src/main/java/jp/wasabeef/glide/transformations/internal/Util.java +++ b/transformations/src/main/java/jp/wasabeef/glide/transformations/internal/Utils.java @@ -20,9 +20,9 @@ import android.os.Build; * limitations under the License. */ -public final class Util { +public final class Utils { - private Util() { + private Utils() { // Utility class. }