From 2e0fe476973b46616a373c62168cdeecd11c5f5d Mon Sep 17 00:00:00 2001 From: chad <54050520@qq.com> Date: Tue, 3 May 2016 15:18:13 +0800 Subject: [PATCH] add image transform --- .../adapter/DefAdpater.java | 11 +++- .../adapter/QuickAdapter.java | 3 +- .../transform/GlideCircleTransform.java | 53 +++++++++++++++++++ .../library/adapter/base/BaseViewHolder.java | 8 +++ 4 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/chad/baserecyclerviewadapterhelper/transform/GlideCircleTransform.java diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DefAdpater.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DefAdpater.java index 501faf19f..be779a815 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DefAdpater.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DefAdpater.java @@ -14,20 +14,24 @@ import com.chad.baserecyclerviewadapterhelper.entity.Status; import java.util.List; + /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ public class DefAdpater extends RecyclerView.Adapter { private final List sampleData = DataServer.getSampleData(100); private Context mContext; + public DefAdpater(Context context) { mContext = context; - } - @Override + } + + @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View item = LayoutInflater.from(parent.getContext()).inflate(R.layout.tweet, parent, false); return new ViewHolder(item); } + @Override public void onBindViewHolder(ViewHolder holder, int position) { Status status = sampleData.get(position); @@ -37,16 +41,19 @@ public void onBindViewHolder(ViewHolder holder, int position) { Glide.with(mContext).load(status.getUserAvatar()).into(holder.avatar); holder.rt.setVisibility(status.isRetweet() ? View.VISIBLE : View.GONE); } + @Override public int getItemCount() { return sampleData.size(); } + public static class ViewHolder extends RecyclerView.ViewHolder { private ImageView avatar; private ImageView rt; private TextView name; private TextView date; private TextView text; + public ViewHolder(View itemView) { super(itemView); text = (TextView) itemView.findViewById(R.id.tweetText); diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/QuickAdapter.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/QuickAdapter.java index fa9b1f60b..a84c4b4f0 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/QuickAdapter.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/QuickAdapter.java @@ -5,6 +5,7 @@ import com.chad.baserecyclerviewadapterhelper.R; import com.chad.baserecyclerviewadapterhelper.data.DataServer; import com.chad.baserecyclerviewadapterhelper.entity.Status; +import com.chad.baserecyclerviewadapterhelper.transform.GlideCircleTransform; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; @@ -25,7 +26,7 @@ protected void convert(BaseViewHolder helper, Status item) { helper.setText(R.id.tweetName, item.getUserName()) .setText(R.id.tweetText, item.getText()) .setText(R.id.tweetDate, item.getCreatedAt()) - .setImageUrl(R.id.tweetAvatar, item.getUserAvatar(), R.mipmap.ic_launcher) + .setImageUrl(R.id.tweetAvatar, item.getUserAvatar(), R.mipmap.ic_launcher, new GlideCircleTransform(mContext)) .setVisible(R.id.tweetRT, item.isRetweet()) .setOnClickListener(R.id.tweetAvatar, new OnItemChildClickListener()) .setOnClickListener(R.id.tweetName, new OnItemChildClickListener()) diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/transform/GlideCircleTransform.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/transform/GlideCircleTransform.java new file mode 100644 index 000000000..3755a3841 --- /dev/null +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/transform/GlideCircleTransform.java @@ -0,0 +1,53 @@ +package com.chad.baserecyclerviewadapterhelper.transform; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Paint; + +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; +import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; + +/** + * Created by tb on 16/5/3. + */ +public class GlideCircleTransform extends BitmapTransformation { + + public GlideCircleTransform(Context context) { + super(context); + } + + @Override + protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { + return circleCrop(pool, toTransform); + } + + private static Bitmap circleCrop(BitmapPool pool, Bitmap source) { + if (source == null) return null; + + int size = Math.min(source.getWidth(), source.getHeight()); + int x = (source.getWidth() - size) / 2; + int y = (source.getHeight() - size) / 2; + + Bitmap squared = Bitmap.createBitmap(source, x, y, size, size); + + Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888); + if (result == null) { + result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); + } + + Canvas canvas = new Canvas(result); + Paint paint = new Paint(); + paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); + paint.setAntiAlias(true); + float r = size / 2f; + canvas.drawCircle(r, r, r, paint); + return result; + } + + @Override + public String getId() { + return getClass().getName(); + } +} diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java b/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java index 85bdf0cc9..8be61315b 100755 --- a/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java +++ b/library/src/main/java/com/chad/library/adapter/base/BaseViewHolder.java @@ -21,6 +21,8 @@ import android.widget.TextView; import com.bumptech.glide.Glide; +import com.bumptech.glide.load.Transformation; +import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; /** @@ -164,6 +166,12 @@ public BaseViewHolder setImageUrl(int viewId, String imageUrl, int defResourceId return this; } + public BaseViewHolder setImageUrl(int viewId, String imageUrl, int defResourceId, BitmapTransformation... transformations) { + ImageView view = getView(viewId); + Glide.with(context).load(imageUrl).crossFade().placeholder(defResourceId).transform(transformations).into(view); + return this; + } + /** * Add an action to set the image of an image view. Can be called multiple times.