-
[Android] View 그려지는 과정 (뷰가 그려지는 순서)IT Study/Android 2024. 1. 20. 16:08728x90
안녕하세요. 이번 글에서는 View가 그려지는 과정에 대해 다뤄보려고 합니다.
안드로이드에서 View는 전위순회 (부모 → 자식 순으로, 위 → 아래, 왼쪽 → 오른쪽) 방식으로 그려집니다.
이렇게 전위순회 방식으로 그려지는 View는
depth가 깊어질수록 확인해야 할 내용이 많아지므로 안드로이드는 flat한 구조로 작성하는 것이 좋습니다.
View가 그려지는 순서를 보도록 하겠습니다.
1. measure
모든 뷰는 자신의 width, height (크기)를 계산합니다.
measure(측정) 과정에서는 부모 - 자식 간의 뷰 크기에 대한 정보를 전달하기 위해 2가지 클래스를 사용하는데요.
ViewGroup.LayoutParams 자식 View가 부모 View에 알리는 내용 (자신이 어떻게 측정되고, 위치를 정할지 요청 시) dp, px (나는 특정 크기로 사이즈를 정할거예요.) match_parent (나는 부모 사이즈와 같이 정할거예요.) wrap_content (나는 내 content만큼 fit한 사이즈로 정할거예요.) ViewGroup.MeasureSpages 부모 View가 자식 View에 알리는 내용 unspecified (자식이 원하는대로 사이즈를 결정해라.) exactly (내가 자식의 정확한 사이즈를 정하겠다.) at_most (자식 뷰의 최대 사이즈는 이 정도까지만 가능하다.) 2. layout
뷰의 크기와 위치를 할당합니다. 부모를 기준으로 상대적인 위치를 계산할 수 있습니다.
3. draw
뷰를 그리는 단계입니다. Canvas에서는 뷰의 모양을 그리며, Paint를 통해 뷰의 색상을 칠할 수 있습니다.
draw 단계에서는 measure에서 측정한 크기로, layout에서 계산한 위치에 뷰를 그립니다.
draw에 대한 콜백은 언제든지 다시 호출할 수 있는데, scroll하거나 swipe하게 된다면 뷰는 onDraw를 다시 호출합니다.
4. ViewUpdate
런타임에 뷰를 다시 그리게 하는 함수입니다.
invalidate View에 변화가 생겨 다시 그려야 할 경우 (color 변화 등) requestLayout View를 처음부터 다시 그려야 할 경우 (크기가 변화해서 measure부터 다시 진행해야 할 경우 등) 'IT Study > Android' 카테고리의 다른 글
[Android] Thread (feat. 스레드란?) (2) 2024.01.24 [Android] counter(계수기, 숫자 세기) 앱 (feat. 화면 회전 시 초기화, 화면 회전 시 UI 가려지기, weight) (1) 2024.01.21 [Android] 액티비티의 라이프 사이클 (생명주기, Life cycle) (0) 2024.01.20 [Kotlin] 코틀린 중급 (feat. 람다, 확장함수, Scope function, 초기화 지연 등...) (0) 2024.01.15 [Kotlin] 코틀린 기초 (feat. 함수, 클래스, Null 등...) (0) 2024.01.14