美文网首页
自定义ImageView实现圆形图片效果

自定义ImageView实现圆形图片效果

作者: 一个好笑的人 | 来源:发表于2022-04-29 22:24 被阅读0次
package com.example.redbook.custom

import android.annotation.SuppressLint
import android.content.Context
import android.graphics.*
import android.graphics.drawable.BitmapDrawable

import android.util.AttributeSet
import android.widget.ImageView

/**
 * 自定义的圆形ImageView,可以直接当组件在布局中使用。
 * @author caizhiming
 */
@SuppressLint("AppCompatCustomView")
class CircleImageView (
    context: Context,
    attrs: AttributeSet
) : ImageView(context,attrs) {
    private val paint: Paint
    /**
     * 绘制圆形图片
     * @author caizhiming
     */
    override fun onDraw(canvas: Canvas) {
        val drawable = drawable
        if (null != drawable) {
            val bitmap = (drawable as BitmapDrawable).bitmap
            val b = getCircleBitmap(bitmap, 14)
            val rectSrc = Rect(0, 0, b.width, b.height)
            val rectDest = Rect(0, 0, width, height)
            paint.reset()
            canvas.drawBitmap(b, rectSrc, rectDest, paint)
        } else {
            super.onDraw(canvas)
        }
    }

    /**
     * 获取圆形图片方法
     * @param bitmap
     * @param pixels
     * @return Bitmap
     * @author caizhiming
     */
    private fun getCircleBitmap(bitmap: Bitmap, pixels: Int): Bitmap {
        val output = Bitmap.createBitmap(
            bitmap.width,
            bitmap.height, Bitmap.Config.ARGB_8888
        )
        val canvas = Canvas(output)
        val color = -0xbdbdbe
        val rect = Rect(0, 0, bitmap.width, bitmap.height)
        paint.isAntiAlias = true
        canvas.drawARGB(0, 0, 0, 0)
        paint.color = color
        val x = bitmap.width
        canvas.drawCircle((x / 2).toFloat(), (x / 2).toFloat(), (x / 2).toFloat(), paint)
        paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
        canvas.drawBitmap(bitmap, rect, rect, paint)
        return output
    }

    init {
        paint = Paint()
    }
}


相关文章

网友评论

      本文标题:自定义ImageView实现圆形图片效果

      本文链接:https://www.haomeiwen.com/subject/bcreyrtx.html