본문 바로가기

gyub's 공부일기/그저 내 공부

View가 그려지는 과정

※※   그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※

 

View가 그려지는 과정

 

뷰 포커싱 -> 레이아웃 그리도록 요청 -> 루트노드(최상단 부모 뷰)에서부터 트리를 따라 전위순회

-> 부모 뷰는 자식 뷰 뒤에 그려짐 -> 형제 뷰는 전위 방식에 따라 그려짐

( 즉, 그저 전위순회를 따라 그려짐. 다만 먼저 그려지는 부모 뷰는 자식 뷰의 뒤에 그려진다는 것을 생각.)

 

전위순회(Pre-order Traversal)

root -> Left -> Right ( 부모노드 -> 왼쪽 자식 노드 -> 오른쪽 자식 노드)

A - B - C - E - D - F - G

 

레이아웃을 그리는 과정은 측정(measure) 단계레이아웃(layout)단계로 그려진다.

 

measure 메서드

public final void measure(int widthMeasureSpec, int heightMeasureSpec)

- 뷰의 크기를 알아내기위해 호출

- 뷰의 크기를 측정하는 것은 measure 내부에 있는 onMeasure(int,int)에서 측정

 

layout 메서드

public void layout(int l, int t, int r, int b)

- 뷰와 자식 뷰들의 크기와 위치를 할당할 때 사용

- measure(int,int)에 의해 각 뷰에 저장된 크기를 사용하여 위치 지정

- onLayout()를 호출하고 onLayout()에서 실제 뷰의 위치를 할당

 

 

뷰의 measure 메서드가 호출될 때 뷰의 width와 heigth가 설정 -> 만약 자식 뷰의 측정값이 너무 크거나 작으면

-> measure()메서드를 다시 호출하여 크기를 재측정.

반응형

'gyub's 공부일기 > 그저 내 공부' 카테고리의 다른 글

Iterator  (0) 2021.04.01
Vector vs ArrayList vs LinkedList  (0) 2021.04.01
String Literal  (0) 2021.04.01
Activity LifeCycle  (0) 2021.03.31
View Lifecycle  (0) 2021.03.31