Glide加载圆角gif 和圆角图片的三种方法 (包括glide加载中的默认图圆角)

直接上代码: 看注解   通过重新imageview 来是图片加圆角,百分百圆角。包括默认加载图也是圆角。
DensityUtils 为dp px的转换工具
 override fun onDraw(canvas: Canvas?) {
//第一种利用画笔的PorterDuffXfermode(PorterDuff.Mode.DST_OUT) 来裁剪
           val layerID = canvas!!.saveLayer(0.0f, 0.0f, width.toFloat(), height.toFloat(), paint, Canvas.ALL_SAVE_FLAG)
        val f1 = RectF(0.0f, 0.0f, width.toFloat(), height.toFloat())
        val ra = Path()
        val rf1 = Path()
        rf1.addRoundRect(f1, radius, radius, Path.Direction.CCW)
        ra.addRect(f1, Path.Direction.CCW)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            ra.op(rf1, Path.Op.DIFFERENCE)
        }
        super.onDraw(canvas)
        paint!!.color = ContextCompat.getColor(context, R.color.white)
        paint!!.xfermode = PorterDuffXfermode(PorterDuff.Mode.DST_OUT)
        paint!!.isAntiAlias = true
        canvas!!.drawPath(ra, paint)
        paint!!.xfermode = null
        canvas!!.restoreToCount(layerID)
//第二种裁剪画布
         val path2: Path = Path()
         val roundRectF = RectF(.0F, .0F, width.toFloat(), height.toFloat())
         path2.addRoundRect(roundRectF, DensityUtils.dpForPx(context, 10F).toFloat(), DensityUtils.dpForPx(context, 10F).toFloat(), Path.Direction.CW);
        canvas!!.clipPath(path2)
        super.onDraw(canvas)

    }
// 第三种 给imageview 加相框 不过得适配画笔颜色和布局背景颜色一样。
//        Drawable drawable = getDrawable();
//        if (null != drawable) {
//            @SuppressLint("DrawAllocation")
//            RectF f = new RectF(0.0f, 0.0f, width, height);
//            @SuppressLint("DrawAllocation") Path now = new Path();
//            @SuppressLint("DrawAllocation") Path bg = new Path();
//            bg.addRect(f, Path.Direction.CCW);
//            now.addRoundRect(f, radius, radius, Path.Direction.CCW);
//            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
//                now.op(bg, now, Path.Op.DIFFERENCE);
//            canvas.drawPath(now, paint);
//        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值