package com.zhaoyang.driver.utils.glide;
|
|
import android.content.Context;
|
import android.content.res.Resources;
|
import android.graphics.Bitmap;
|
import android.graphics.BitmapShader;
|
import android.graphics.Canvas;
|
import android.graphics.Paint;
|
import android.graphics.RectF;
|
|
import androidx.annotation.NonNull;
|
|
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
|
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
|
import com.bumptech.glide.load.resource.bitmap.TransformationUtils;
|
|
import java.security.MessageDigest;
|
|
|
/**
|
* Created by CaostGrace on 2018/6/27 9:35
|
*
|
* @project_name: baoxin
|
* @package_name: com.cdwh.chatApp.utils
|
* @class_name: GlideRoundTransform
|
* @github: https://github.com/CaostGrace
|
* @简书: http://www.jianshu.com/u/b252a19d88f3
|
* @content: 圆角图片
|
*/
|
public class GlideRoundTransform extends BitmapTransformation {
|
|
private static float radius = 0f;
|
|
/**
|
* 构造函数 默认圆角半径 4dp
|
*
|
* @param context Context
|
*/
|
public GlideRoundTransform(Context context) {
|
this(context, 4);
|
}
|
|
/**
|
* 构造函数
|
*
|
* @param context Context
|
* @param dp 圆角半径
|
*/
|
public GlideRoundTransform(Context context, int dp) {
|
super();
|
radius = Resources.getSystem().getDisplayMetrics().density * dp;
|
}
|
|
@Override
|
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
|
Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight);
|
return roundCrop(pool, bitmap);
|
}
|
|
private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
|
if (source == null) return null;
|
|
Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
|
if (result == null) {
|
result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
|
}
|
|
Canvas canvas = new Canvas(result);
|
Paint paint = new Paint();
|
paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
|
paint.setAntiAlias(true);
|
RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
|
canvas.drawRoundRect(rectF, radius, radius, paint);
|
return result;
|
}
|
|
|
@Override
|
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
|
|
}
|
}
|