Android Glide 展示 带边框的 ---矩形/圆形 --- 图片

这篇博客介绍了如何在Android中利用Glide库展示带有边框的图片,包括矩形和圆形两种形态。文章鼓励读者如果有更优的实现方式,可以通过留言进行交流,共同进步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

核心代码:-----------------
public class GlideCircleBorderTransform  extends BitmapTransformation {
    private final String ID = getClass().getName();
    private Paint mBorderPaint;
    private float borderWidth;
    private int borderColor;


    public GlideCircleBorderTransform(float borderWidth, int borderColor) {
        this.borderWidth = borderWidth;
        this.borderColor = borderColor;
        mBorderPaint = new Paint();
        mBorderPaint.setColor(borderColor);
        mBorderPaint.setStyle(Paint.Style.STROKE);
        mBorderPaint.setAntiAlias(true);
        mBorderPaint.setStrokeWidth(borderWidth);
        mBorderPaint.setDither(true);

    }
//
//    @Override
//    protected Bitmap transform(Context context, BitmapPool bitmapPool, Bitmap bitmap, int i, int i1) {
//        return circleCrop(bitmapPool, bitmap);
//    }

    private Bitmap circleCrop(BitmapPool bitmapPool, Bitmap source) {

        int size = Math.min(source.getWidth(), source.getHeight());
        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;
        Bitmap square = Bitmap.createBitmap(source, x, y, size, size);
        Bitmap result = bitmapPool.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();
        //设置 Shader
        paint.setShader(new BitmapShader(square, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        float radius = size / 2f;
        //绘制一个圆s
//        canvas.drawCircle(radius, radius, radius, paint);  

        //----绘制圆角矩形
        RectF rectFs = new RectF(10, 110, 90, 190); //显示矩形时 具体的宽高 大小数值需要自己调
        canvas.drawRoundRect(rectFs, 10, 10, paint);

        /************************描边*********************/
        //注意:避免出现描边被屏幕边缘裁掉
        float borderRadius = radius - (borderWidth / 2);
        //画边框
//        canvas.drawCircle(radius, radius, borderRadius, mBorderPaint);

        //----绘制圆角矩形
        RectF rectF = new RectF(10, 100, 110, 200);   //显示矩形时 具体的宽高大小数值需要自己调
        canvas.drawRoundRect(rectF, 10, 10, mBorderPaint);

        return result;
    }

    @Override
    public void updateDiskCacheKey(MessageDigest messageDigest) {
        messageDigest.update(ID.getBytes(CHARSET));
    }

    @Override
    public boolean equals(Object o) {
        return o instanceof GlideCircleBorderTransform;
    }

    @Override
    public int hashCode() {
        return ID.hashCode();
    }

    @Override
    protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {
//        return null;
                return circleCrop(pool, toTransform);

    }
}

 

显示。。使用方法。-----------------------

        RequestOptions options = new RequestOptions()
                .centerCrop()
                .bitmapTransform(new GlideCircleBorderTransform(3, R.color.possible_result_points))
               .diskCacheStrategy(DiskCacheStrategy.DATA);

        Glide.with(this)
                .load(R.mipmap.default_people_img)
                .apply(options)
                .into(homeuserimg);

如果您有更好的实现方法---可以留言进行相互的交流 共同成长



 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值