android圆角glide,Glide加载圆角图片的方法

原标题:Glide加载圆角图片的方法

现在在市面上很多App的UI设计都会出现圆角图片的显示。Glide本身也提供了圆角图片的加载方式。但是我们在开发中有可能遇到只要顶部展示圆角,或者某一个角是圆角。这样的需求是该怎么实现呢?

Glide有对外暴露一个方法,可以在图片显示前,对图片作转换处理——就是Transformations。有关此方面的文字,小可爱们可以看看这篇——Glide - 自定义转换。本文的RoundCorner就是继承了BitmapTransformation类来实现的。它对外提供两个构造函数,一个构造函数有四个参数,分别是leftTop:左上角、rightTop:右上角、leftBottom:左下角、rightBottom:右下角。

1、普通的四个角为圆角图片:Glide.with( this).load( "https://manhua.qpic.cn/vertical/0/07_22_36_afe651da2ab940d0e257a1ec894bd992_1504795010150.jpg/420")

.apply(RequestOptions.bitmapTransform(RoundedCorners( 20)))

. into(iv)

实现的效果如下:

d0c618707f620377156b1fcdfaa46136.png

2、实现部分的圆角importandroid.content.Context

importandroid.graphics.*

importcom.bumptech.glide.load.Key

importcom.bumptech.glide.load.engine.bitmap_recycle.BitmapPool

importcom.bumptech.glide.load.resource.bitmap.BitmapTransformation

importjava.security.MessageDigest

classRoundCornerconstructor(context: Context,leftTop: Float= 0f,

rightTop: Float= 0f,

rightBottom: Float= 0f,

leftBottom: Float= 0f) : BitmapTransformation() {

privatevalID: String = "com.jadynai.kotlindiary.RoundCorner$leftTop$rightTop$leftBottom$rightBottom"

privatevalleftTop: Float= dip2px(context,leftTop).toFloat()

privatevalrightTop =dip2px(context,rightTop).toFloat()

privatevalleftBottom = dip2px(context,leftBottom).toFloat()

privatevalrightBottom = dip2px(context,rightBottom).toFloat()

privatevalID_BYTES: ByteArray

//dp转px

fundip2px(var0: Context, var1: Float): Int{

valvar2 = var0.resources.displayMetrics.density

return(var1 * var2 + 0.5f).toInt()

}

init {

ID_BYTES = ID.toByteArray(Key.CHARSET)

}

overridefuntransform(

pool: BitmapPool, toTransform: Bitmap, outWidth: Int, outHeight: Int): Bitmap {

valwidth = toTransform.width

valheight = toTransform.height

valbitmap = pool. get(width, height, Bitmap.Config.ARGB_8888)

bitmap.setHasAlpha( true)

valcanvas = Canvas(bitmap)

valpaint = Paint()

paint.isAntiAlias = true

paint.shader = BitmapShader(toTransform, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)

valrect = RectF( 0f, 0f, width.toFloat(), height.toFloat())

valradii = floatArrayOf(leftTop, leftTop, rightTop, rightTop, rightBottom, rightBottom, leftBottom, leftBottom)

valpath = Path()

path.addRoundRect(rect, radii, Path.Direction.CW)

canvas.drawPath(path, paint)

returnbitmap

}

overridefunequals(other: Any?): Boolean{

if(other isRoundCorner) {

returnleftTop == other?.leftTop && rightTop == other?.rightTop && leftBottom == other?.leftBottom && rightBottom == other?.rightBottom

}

returnfalse

}

overridefunhashCode(): Int{

returnID.hashCode() + leftTop.hashCode() + rightTop.hashCode() + leftBottom.hashCode() + rightBottom.hashCode()

}

overridefunupdateDiskCacheKey(messageDigest: MessageDigest){

messageDigest.update(ID_BYTES)

}

}

Glide.with( this).load( "https://manhua.qpic.cn/vertical/0/07_22_36_afe651da2ab940d0e257a1ec894bd992_1504795010150.jpg/420")

.apply(RequestOptions.bitmapTransform(RoundCorner( this,leftTop = 20f, rightBottom = 20f)))

.into(iv) //实现左上角和右下角圆角

实现的效果:

26ad6cf1e130c2e25a2f379575de9237.png

3、实现一个角是圆角Glide.with( this).load( "https://manhua.qpic.cn/vertical/0/07_22_36_afe651da2ab940d0e257a1ec894bd992_1504795010150.jpg/420")

.apply(RequestOptions.bitmapTransform(RoundCorner( this,rightTop = 20f)))

.into(iv) //右上角

实现效果:

cca3e3cdbe4f60a3e45ea101f306254b.png

=======分隔符========返回搜狐,查看更多

责任编辑:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值