일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 목적중심리더십
- 리얼하다
- 북한살둘레길
- 어떻게 나답게 살 것인가
- 한달브런치북만들기
- 프래그먼트
- 브런치작가되기
- 지지않는다는말
- 자취필수템
- 1일1커밋
- 소프시스
- 베드트레이
- 좌식테이블
- 끝말잇기
- 목적 중심 리더십
- T자형인재
- 한달독서
- 한단어의힘
- 안드로이드
- 재택근무
- 소프시스 밤부 좌식 엑슬 테이블
- 슬기로운 온라인 게임
- 커스텀린트
- 캐치마인드
- 베드테이블
- 면접
- 한달어스
- 테트리스
- 아비투스
- 함수형 프로그래밍
- Today
- Total
정상에서 IT를 외치다
[Android, Drawing View] 안드로이드에서 뷰가 그려지는 과정 본문
안녕하세요. 블랙진입니다.
How Android Draws Views 일부를 번역한 글입니다.
How Android Draws Views
엑티비티가 포커스를 받게되면, 레이아웃을 그리기 시작합니다. 안드로이드 프레임워크는 그림을 그리기 위한 순서를 수행하지만 엑티비티는 계층 레이아웃의 루트 노드를 공급받아야만 합니다.
그리기는 레이아웃의 루트 노드 부터 시작하며 레이아웃 트리를 측정하고 그려야 합니다. 각 뷰 그룹은 자식 뷰가 그러질 책임을 갖고 뷰는 자기 자신을 그립니다. 왜냐하면 전위 순회 트리(traversed pre-order tree)구조 이기 때문에 부모 뷰는 자식 뷰 보다 먼저 그려집니다
레이아웃은 두 가지 패스 과정을 통해 그립니다. : Measure Pass(측정 패스), Layout pass(레이아웃 패스)
Measure Pass
측정 패스는 measure(int, int) 함수 호출로 구현되고 뷰 트리의 하향식 탐색을 따릅니다. 각 뷰는 재귀동안 치수 사양을 트리 아래로 전달합니다. 측정 패스의 마지막 단계에는 모든 뷰가 측정치를 가지게 됩니다. 두번째 패스로 Layout(int, int, int, int) 함수가 호출 되며 이것 또한 하향식 탐색입니다. 패스 중에 각 부모 뷰는 측정 패스에서 계산된 크기를 가지고 자식 뷰가 배치되도록 합니다.
측정 패스는 두 클래스를 사용해 치수를 정합니다.
ViewGroup.LayoutParams Class는 뷰가 어떻게 측정되고 배치되어 질지를 정합니다.
Base ViewGroup.LayoutParams Class 는 뷰의 가로와 세로가 어떻게 커질지를 정합니다.
각 치수는 3가지 값이 있습니다.
- 구체적인 수치 (10px, 100dp)
- MATCH_PARENT : 부모 뷰 만큼의 크기를 가집니다.
- WRAP_CONTENT : 뷰가 내용물을 감쌀 만큼의 크기를 가집니다.(패딩 포함)
Layout Pass
레이아웃을 초기화 하기 위해 requestLayout()을 호출합니다. 이 메소드는 통상 현재의 경계 내에서 적합하지 않은 경우 자신의 View 에 의해 불려집니다.
안드로이드 전위 순회 예제
여기서 부터는 번역글이 아닙니다.
전위 순위에 따라 뷰가 어떤 순서로 그려지는지 확인하기 위해 예제를 만들었습니다.
위와 같은 계층 구조의 레이아웃이 있는 경우 어떤 순서로 그려 질까요? 이를 좀더 보기 쉽게 그려 보았습니다.
전위 순회 트리 순서로 뷰는 그려지게 됩니다. 실재로 어떻게 그려지는지 로그를 통해 확인해 봤습니다.
사용한 예제 코드
'안드로이드' 카테고리의 다른 글
[Firebase Crashlytics] 안드로이드 에러 리포트 사용기 (3) | 2019.06.20 |
---|---|
[Android, Behavior] CoordinatorLayout 에서 Behavior 사용해 보기 (7) | 2019.05.13 |
[Android, MVP] 리뷰 받은 MVP 예제 with Dagger (0) | 2019.04.17 |
[Android, Proguard] 안드로이드 프로가드 설정하기 2 (2) | 2019.04.16 |
[Android, Release Compile] 릴리즈 버전으로 컴파일 하기 (2) | 2019.04.16 |