Glide 4解决占位符没有裁剪成圆形的问题

2019-08-02  本文已影响0人  英勇的骑士_d175

废话不说,直接上代码,Kotlin版本

1、圆形图片

var headIv = ImageView()
val options = RequestOptions.circleCropTransform()//圆形图片  
options.error(R.mipmap.ic_logo).placeholder(R.mipmap.ic_logo)//错误图、占位图
val transforms = Glide.with(mContext).load(R.mipmap.ic_logo).apply(RequestOptions().circleCrop())//解决占位图非圆形问题
Glide.with(mContext).load(item!!.user_icon).apply(options).thumbnail(transforms).into(headIv)

2、圆角图片

var headIv = ImageView()
val options = RequestOptions()//圆形图片  
options.transform(GlideRoundTransform(mContext,5))//设置圆角大小
options.error(R.mipmap.ic_logo).placeholder(R.mipmap.ic_logo)//错误图、占位图
Glide.with(mContext).load(item!!.user_icon).apply(options).into(headIv)
package com.green.mines.utils;

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 com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;

import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;

import java.security.MessageDigest;

/***

* glide 图片设置圆角

*

* //第一个是上下文,第二个是圆角的弧度

*        RequestOptions myOptions = new RequestOptions()

*                .transform(new GlideRoundTransform(this,30));

*/

public class GlideRoundTransformextends BitmapTransformation {

private final Contextcontext;

    private static float radius =0f;

    public GlideRoundTransform(Context context) {

this(context, 4);

    }

public GlideRoundTransform(Context context, int dp) {

this.context = context;

        this.radius = Resources.getSystem().getDisplayMetrics().density * dp;

    }

@Override

    protected Bitmaptransform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {

return roundCrop(pool, toTransform);

    }

private static BitmaproundCrop(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;

    }

public StringgetId() {

return getClass().getName() + Math.round(radius);

    }

@Override

    public void updateDiskCacheKey(MessageDigest messageDigest) {

}

}
上一篇 下一篇

猜你喜欢

热点阅读