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
}
상단 코너만 필요해서 확장 함수로 만들었으나 파라미터를 받아 필요에 따라 여러 종류의 라운드를 처리하는 함수를 만들어도 좋을 것 같다.
반응형
'Development > Android' 카테고리의 다른 글
[android] 사용하지 않는 리소스(Unused resources) 삭제 (0) | 2022.05.11 |
---|---|
[android] touch event flow (0) | 2022.05.06 |
[android] ViewPager2 setOnTouchListener (0) | 2022.04.26 |
[andrdoid] Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2] (0) | 2022.04.20 |
[android] 더 이상 앱내 웹뷰에서 페이스북 로그인기능을 사용할 수 없습니다 (0) | 2022.03.11 |
댓글