Android/Study

[Android] View가 그려지는 순서

Tenacity_Dev 2024. 1. 13. 19:57
728x90

View가 그려지는 과정에 대해서 알아보자.

 

이를 알아야하는 이유는 크게 2가지가 있다.

  1. Ui를 그리는 기본 구성요소가 바로 View이기 때문이다.
  2. Custrom View를 만들기위해서는 위 과정을 알아야 한다.

전위순회 방식을 쓰기 때문에, 부모 부터 자식 뷰 순서로 그려지게 됨

measure

  • 뷰의 크기를 계산
  • 모든 뷰는 각각 자신의 width, height 를 계산
  • measure 과정에서, 부모 - 자식 뷰간의 크기 정보 전달을 위해 2가지 클래스 사용
    • ViewGroup.LayoutParams : 자식 뷰가 부모 뷰에게 자신이 어떻게 측정되고 위치를 정할지 요청 할 때 사용, (how big)
      • DP, PX.. : 자식뷰가 원하는 사이즈
      • MATCH_PARENT : 부모 뷰 사이즈와 똑같이 자식뷰 사이즈 지정
      • WRAP_CONTENT : 부모 뷰 안에서, content 를 표현할 수 있는 fit 한 사이즈 지정
    • ViewGroup.MeasureSpecs : 부모 뷰가 자식 뷰에게 요구사항을 전달할 때 사용
      • UNSPECIFIED : 부모 뷰는 자식 뷰가 원하는 사이즈로 결정
      • EXACTLY : 부모 뷰가 자식 뷰의 사이즈를 정확히 지정할 때
      • AT_MOST : 부모 뷰가 자식 뷰의 최대 사이즈를 지정할 때

 

layout

  • 뷰의 크기와 위치를 할당
  • 부모기준의 상대적 위치 (left, top, right, bottom) 을 계산

 

draw

  • 뷰를 그리는 단계
    • Canvas : 뷰의 모양을 그리는 객체
    • Paint : 뷰의 색상을 칠하는 객체
  • measure, layout 에서 측정한 크기와, 계산한 위치에 뷰를 그림
  • 이 콜백은 언제든 다시 호출 될 수 있음
    • scroll 이나 swipe 를 하게 되면 뷰는 onDraw 다시 호출
    • 객체 할당과 같이 리소스가 많이 소모되는 로직은 추가하지 말 것
  • ViewUpdate : 런타임에 뷰를 다시 그리게 하는 함수
    • invalidate : view 에 변화가 생겨서 다시 그려야 할 때
      • color 변화 등
    • requestLayout : view 를 처음부터 그려야 할 때
      • 크기가 변화해서 measure 부터 다시 해야할 때

 

참고

https://velog.io/@eia51/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%97%90%EC%84%9C-View%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B7%B8%EB%A0%A4%EC%A7%88%EA%B9%8C

 

[Android] View는 어떻게 그려질까?

안드로이드 그래픽의 기본이 되는 View에 대해 알아봅시다

velog.io

https://skytitan.tistory.com/12

 

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

 

skytitan.tistory.com

https://namneul.tistory.com/34

 

안드로이드 UI 렌더링 방식 (View가 그려지는 과정)

안드로이드의 화면은 아래와 같은 단위로 구성된다. 화면을 구성하는 최소 단위는 View이며 최대 단위는 Window이다. Window > Surface > Canvas > View Window Window는 화면 구성의 가장 상위 요소로 무언가를

namneul.tistory.com

https://developer.android.com/guide/topics/ui/how-android-draws?hl=ko

 

Android가 뷰를 그리는 방법  |  Android 개발자  |  Android Developers

활동이 포커스를 받으면 레이아웃을 그리라는 요청을 받습니다. Android 프레임워크에서 그리기 절차를 처리하지만 활동에서 레이아웃 계층 구조의 루트 노드를 제공해야 합니다. 그리기는 레이

developer.android.com

 

728x90