class BitmapView : View {
constructor(context: Context) : super(context)
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
context,
attributeSet,
defStyleAttr
)
@SuppressLint("DrawAllocation")
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
val bitmapPaint = Paint(Paint.ANTI_ALIAS_FLAG) //ANTI_ALIAS_FLAG속성은 paint를 부드럽게 해준다.
bitmapPaint.style = Paint.Style.FILL
bitmapPaint.color = Color.parseColor("#4b4c4e") //bitmap 색상
val bitmap = Util.getBitmap(bitmapPaint, 10)
//bitmapShader 설정
bitmapPaint.shader = BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT)
canvas?.drawRoundRect( //실제 그리는 부분
0f,
5f,
580f,
15f,
context.dp(12).toFloat(), //radiusX
context.dp(12).toFloat(), //radiusY
bitmapPaint
)
}
}
fun getBitmap(bitmapPaint: Paint, tileSize: Int): Bitmap {
return Bitmap.createBitmap(tileSize * 2, tileSize * 2, Bitmap.Config.ARGB_8888).apply {
val bitmapCanvas = Canvas(this)
bitmapCanvas.drawRect(
0f,
0f,
tileSize.toFloat(),
tileSize.toFloat(),
bitmapPaint
)
//두번째 줄은 한칸 띄우고 시작
bitmapCanvas.drawRect(
tileSize.toFloat(),
tileSize.toFloat(),
tileSize * 2f,
tileSize * 2f,
bitmapPaint
)
}
}
이런식으로 그려진다. 자세히 보면 roundRect로 그렸기 때문에 좌우끝이 둥그런 것을 볼 수 있다.