android 점선 만드는 방법 2가지

나고수·2022년 7월 4일
0

1일1공부

목록 보기
54/68
post-custom-banner

1. xml에 dash 기능 이용

2. 직접 bitmap그리기

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로 그렸기 때문에 좌우끝이 둥그런 것을 볼 수 있다.

profile
되고싶다
post-custom-banner

0개의 댓글