본문 바로가기
Development/Android

[android] 안드로이드 필요한곳만 라운드처리하기

by Sonagiya 2022. 4. 26.
728x90
반응형

일반적인 방법으로는

XML(shape) 작성 -> 라운드 처리가 필요한 뷰의 background설정 -> 자녀 뷰가 코너를 가리는 경우 clipToOutline을 true로 설정한다

 

하지만 원하는 코너만 사용하고 싶을때는?

Shape의 Corners는 topRightRadius와 같이 4방향의 설정값을 지정하지만 실제로 적용되지 않는다. 검색을 하니 View의 outlineProvider를 설정하여 Outline의 Rect를 직접 설정하는 방법이 있었다. 이 방법은 Rect를 설정함에 따라 원하는 코너만 적용할 수 있었다.

 

fun View.roundTop(@DimenRes dimen: Int) {
    val radius = context.resources.getDimensionPixelSize(dimen)
    outlineProvider = object : ViewOutlineProvider() {
        override fun getOutline(view: View?, outline: Outline?) {
            outline?.setRoundRect(0, 0, view?.width ?: 0, (view?.height ?: 0) + radius, radius.toFloat())
        }
    }

    clipToOutline = true
}

상단 코너만 필요해서 확장 함수로 만들었으나 파라미터를 받아 필요에 따라 여러 종류의 라운드를 처리하는 함수를 만들어도 좋을 것 같다.

반응형

댓글