kotlin - Glide显示三角形图片
kotlin - Glide显示三角形图片,核心知识点:BitmapTransformation、Path、setXfermode
·
kotlin - Glide显示三角形图片

核心知识点:BitmapTransformation、Path、setXfermode,跟自定义view一样,都是使用canvas
/** * Author : wn * Email : maoning20080808@163.com * Date : 2025/6/5 17:03 * Description : 结合Glide,继承BitmapTransformation,使用canvas实现三角形 * 原理:通过Path定义三角形路径,利用 PorterDuff.Mode.SRC_IN 保留路径内的像素。 * BitmapTransformation 是一个抽象类,继承自 Transformation<Bitmap>,专门用于处理 Bitmap 的转换。Glide 内置的许多图片变换(如圆形裁剪、圆角处理等)都是基于它实现的。 */ class TriangleTransformation : BitmapTransformation(){ override fun transform( pool: BitmapPool, source: Bitmap, outWidth: Int, outHeight: Int ): Bitmap { //创建目标Bitmap(大小与原图相同) , Bitmap 复用:始终通过 BitmapPool 获取 Bitmap val result = pool.get(source.width, source.height, Bitmap.Config.ARGB_8888) val canvas = Canvas(result) //定义三角形路径 val path = Path().apply { moveTo(source.width / 2f , 0f) //顶点 lineTo(0f, source.height.toFloat()) //左下角 lineTo(source.width.toFloat(), source.height.toFloat()) //右下角 close() } //定义三角形路径 - 看看效果 /*val path = Path().apply { moveTo(source.width / 2f , source.height.toFloat()) //顶点 lineTo(0f, 0f) //左上角 lineTo(source.width.toFloat(), 0f) //右上角 close() }*/ //裁剪并绘制 val paint = Paint(Paint.ANTI_ALIAS_FLAG) canvas.drawPath(path, paint) paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN) canvas.drawBitmap(source, 0f, 0f, paint) return result } //用于生成唯一的缓存键,必须正确实现以确保缓存正确工作。 override fun updateDiskCacheKey(messageDigest: MessageDigest) { messageDigest.update("triangle_transform".toByteArray()) } }
使用:
private fun processShapeTriangleCustom(){
var imageUrl = "http://gips0.baidu.com/it/u=1690853528,2506870245&fm=3028&app=3028&f=JPEG&fmt=auto?w=1024&h=1024"
Glide.with(this)
.load(imageUrl)
.transform(TriangleTransformation())
.into(binding.glideImageViewCustom)
}更多推荐



所有评论(0)