鉴于昨天很晚测试了一堆码后

我得出结论Glide4 我玩不转啊 /大哭

不过 测试的好几个百度到的示例 有的方法明显过时 有的性能 啧啧 不敢恭维...

其中比较好用的 有如下两个

直接抄砖吧....

/**  * 圆形 **/public class GlideCircleTransform extends BitmapTransformation {    private static final String ID = "com.examle.nnp.ah.glide.GlideCircleTransform";    private static final byte[] ID_BYTES = ID.getBytes(CHARSET);    @Override    protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {        int size = Math.min(toTransform.getWidth(), toTransform.getHeight());        int x = (toTransform.getWidth() - size) / 2;        int y = (toTransform.getHeight() - size) / 2;        Bitmap square = Bitmap.createBitmap(toTransform, x, y, size, size);        Bitmap circle = pool.get(size, size, Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(circle);        Paint paint = new Paint();        paint.setShader(new BitmapShader(square, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));        paint.setAntiAlias(true);        float r = size / 2f;        canvas.drawCircle(r, r, r, paint);        return circle;    }    @Override    public boolean equals(Object obj) {        return obj instanceof GlideCircleTransform;    }    @Override    public int hashCode() {        return ID.hashCode();    }    @Override    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {        messageDigest.update(ID_BYTES);    }}

 

/**  * 圆角 **/public class GlideRoundTransform  extends BitmapTransformation {    private static final String ID = "com.examle.nnp.ah.glide.GlideRoundTransform";    private static final byte[] ID_BYTES = ID.getBytes(CHARSET);    private int radius;    public GlideRoundTransform(Context context, int radius) {        this.radius = UUi.dp2px(radius);    }    @Override    protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {        int width = toTransform.getWidth();        int height = toTransform.getHeight();        Bitmap bitmap = pool.get(width, height, Bitmap.Config.ARGB_8888);        bitmap.setHasAlpha(true);        Canvas canvas = new Canvas(bitmap);        Paint paint = new Paint();        paint.setAntiAlias(true);        paint.setShader(new BitmapShader(toTransform, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));        canvas.drawRoundRect(new RectF(0, 0, width, height), radius, radius, paint);        return bitmap;    }    @Override    public boolean equals(Object obj) {        if (obj instanceof GlideRoundTransform) {            GlideRoundTransform other = (GlideRoundTransform) obj;            return radius == other.radius;        }        return false;    }    @Override    public int hashCode() {        return Util.hashCode(ID.hashCode(), Util.hashCode(radius));    }    @Override    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {        messageDigest.update(ID_BYTES);        byte[] radiusData = ByteBuffer.allocate(4).putInt(radius).array();        messageDigest.update(radiusData);    }}

--------------------------------------------------------分 ---- 割 -----线----------------------------------------------------------------

到最后 我查阅官方文档发现....

新版的Glide里面 已经封装了相关的方法

RequestOptions options = new RequestOptions(); //圆角options.bitmapTransform(new RoundedCorners(1));
RequestOptions options = new RequestOptions(); //圆形options.bitmapTransform(new CircleCrop());

哭死.... 不说了 前面又有个坑 我先去踩了....

最后... 用完这个还是没解决您的问题 不妨试试 这个自定义的类

/** * @作者: yzq * @创建日期: 2019/8/7 20:25 * @文件作用: 绘制圆角图 **/public class GlideRoundTransform extends BitmapTransformation {    private static float radius = 0f;    private static int type = 0;    public GlideRoundTransform() {        this(4);    }    public GlideRoundTransform(int dp) {        super();        this.type = 0;        this.radius = Resources.getSystem().getDisplayMetrics().density * dp;    }    /**     * @param dp     * @param type 为1 则只绘制 图片上面两个圆角     */    public GlideRoundTransform(int dp, int type) {        super();        this.type = type;        this.radius = Resources.getSystem().getDisplayMetrics().density * dp;    }    @Override    protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {        //变换的时候裁切        Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight);        return roundCrop(pool, bitmap);    }    @Override    public void updateDiskCacheKey(MessageDigest messageDigest) {    }    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);        if (type == 0) {            RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());            canvas.drawRoundRect(rectF, radius, radius, paint);        }        if (type == 1) {            RectF rectRound = new RectF(0f, 100f, source.getWidth(), source.getHeight());            canvas.drawRect(rectRound, paint);        }        return result;    }}

调用

RequestOptions options = new RequestOptions();            options.centerCrop()                    .placeholder(R.drawable.c_error) //预加载                    .error(R.drawable.c_error)      //失败                    .priority(Priority.IMMEDIATE) //优先级                    .diskCacheStrategy(DiskCacheStrategy.RESOURCE)//设置缓存策略                    .transform(new GlideRoundTransform(cornerRadius,type));//设置四角圆角Glide.with(context).load(url).apply(options).into(imageView);

当然 你要想了解更多Glide的使用 可参阅:https://www.cnblogs.com/94xiyang/p/9662042.html

https://blog.csdn.net/huangxiaoguo1/article/details/78543224

更多相关文章

  1. Eclipse安装Android插件的问题
  2. SurfaceView闪烁问题的根源-双缓存机制
  3. Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
  4. Android(安卓)Cavans 基础应用
  5. cocos2dx 遮罩层 android 手机上 失败
  6. Android(安卓)仿百度网页音乐播放器圆形图片转圈播放效果
  7. Android(安卓)Gallery3d源码学习总结(二)——绘制流程drawThumbnai
  8. Android(安卓)3D翻转效果实践
  9. Android实现步进式录像进度条

随机推荐

  1. 最新的数据显示,十分之四的 Android 用户
  2. Android中布局的巧妙设计【android进化二
  3. Android开发第1-1课:创建一个Android工程
  4. Android牛博
  5. 针对Android的Crash监控, 崩溃分析---推
  6. android基本理解
  7. 在 Android 中调用二进制可执行程序(nativ
  8. Android开发之Tools使用
  9. Android学习系列(一)初识安卓
  10. Android(安卓)判断网络状态,并且在没有网