draw()
메서드를 통해 각 하위요소(View or ViewGroup)를 그림.<aside> 💡 Android 프레임워크는 유효한 영역에 없는 View 객체를 그리지 않음. invalidate() 메서드를 호출하여 View를 강제로 그릴 수 있음.
</aside>
측정 패스
와 레이아웃 패스
라는 두 패스로 레이아웃을 그림.measure()
메서드로 View의 크기를 알아보기 위해 호출되고, 상위 항목은 너비와 높이 매개변수에 정보를 제공함.measure()
가 반환되면 측정된 값(MeasureSpec)과 모든 View객체의 하위 요소 값을 설정함.
measure()
는 내부적으로 onMeasure
메서드를 호출하고 실제 크기 계산은 onMeasure()
메서드에서 실행됨.ViewGroup.LayoutParams
: View 객체가 어떻게 측정되고 배치되어 질지를 정함.Base ViewGroup.LayoutParam
: 뷰의 가로와 세로가 어떻게 커질지를 정함.측정 패스를 정리하자면, measure
단계에서 ViewGroup.LayoutParams
를 사용하여 View의 크기를 알아보고, MeasureSpec
을 생성하여 onMeasure
를 호출 후, onMeasure
에서 MeasureSpec
에 기반한 최종적은 View의 크기를 결정함.
layout
메서드로 호출이 시작되고, 이는 뷰의 최종적인 위치를 지정함.
onLayout()
은 뷰 그룹이 자식 뷰들을 어떻게 배치할 것인지를 결정하는 로직을 포함.requestLayout()
은 어떤 시점에서 뷰의 경계가 변경되었다면, View를 다시 측정하기 위해 이를 호출하여 Mesure, Layout 단계를 다시 거칠 수 있음.