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()
}
}
网友评论