[안드로이드] View가 그려지는 과정

J·2023년 3월 20일
1

안드로이드

목록 보기
27/29

1. Constructor :

모든 뷰는 생성자에서 출발하게 됩니다.
생성자에서 초기화되고, default 값을 설정합니다.
뷰는 초기설정을 쉽게 세팅하기 위해서 AttributeSet 이라는 인터페이스를 지원합니다.
attrs.xml 파일(res/values/attrs.xml)을 만들어 이것을 부름으로서 뷰의 설정값을 쉽게 설정할 수 있습니다.

2. onAttachedToWindow() :

부모 뷰가 addView(childView)를 호출한 뒤 자식뷰는 윈도우에 붙게 됩니다.
이때 뷰의 id를 통해 접근할 수 있습니다.

3. onMeasure() :

뷰의 크기를 측정하는 단계로 중요합니다.
레이아웃에 맞게 특정 크기를 가져가야 합니다.

여기서는 세 가지의 단계가 있는데

  1. 뷰가 원하는 사이즈를 계산합니다.
  2. MeasureSpec에 따라 mode를 가져옵니다.
  3. MeasureSpec의 mode를 체크하여 뷰의 크기를 적용합니다.

4. onLayout() :

뷰의 위치와 크기를 할당합니다.
onMeasuer를 통해 사이즈가 결정된 후에 onLayout이 불립니다.
부모뷰일때 주로 쓰이며, child 뷰를 붙일 때 위치를 정해주는데 사용합니다.
넘어오는 파라미터는 어플리케이션 전체를 기준으로 위치가 넘어옵니다. (주의)

5. onDraw() :

뷰를 실제로 그리는 단계입니다.
Canvas와 Paint를 이용하여 필요한 내용을 그립니다.

여기서 주의할 점은 onDraw 함수를 호출시 많은 시간이 소요됩니다.
Scroll 또는 Swipe 등을 할 경우 뷰는 다시 onDraw와 onLayout을 다시 호출하게 됩니다.
따라서 함수 내에서 객체할당을 피하고 한 번 할당한 객체를 재사용할 것을 권장합니다.

퍼센티지를 보여주는 숫자 0~100과 그에 맞는 퍼센티지를 원으로 보여주는 뷰를 그립니다.
invalidate를 통하여 1초마다 갱신하여 다시 그립니다.

ViewUpdate

  • invalidate() : 단순히 뷰를 다시 그릴 때 사용됩니다. 예를 들어 뷰의 text 또는 color가 변경되거나, touch interactivity가 발생할 때 onDraw() 함수를 재호출하면서 뷰를 업데이트 합니다.
  • requestLayout() : onMeasure()부터 다시 뷰를 그린다. 뷰의 사이즈가 변경될 때 그것을 다시 재측정해야하기 lifecycle을 onMeasure() 부터 순회하면서 뷰를 그립니다.

0개의 댓글