본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] 뷰가 그려지는 과정 ( 부모뷰 vs 자식뷰 )

by 돼지왕 왕돼지 2013. 8. 17.
반응형


 안드로이드, 뷰가 그려지는 과정( 부모뷰 vs 자식뷰 )

 

[android] 뷰가 그려지는 과정 ( 부모뷰 vs 자식뷰 )


 부모뷰는 자식뷰가 ViewGroup 에 추가될 때 넘겨 받은 LayoutParams 값을 기반으로 자식 View 에게 다음 3가지 방식 중 한 가지 방식을 통해 필요한 영역 크기를 물어본다.



UNSPECIFIED.


자식에게 원하는 값을 마음껏 적어 내라는 것. wrap_content 의 경우 부모뷰는 자식뷰가 얼마나 많은 공간이 필요한지 알 수 없다. 따라서 자식뷰에게 꼭 물어봐야 한다.




EXACTLY


자식에게 정확히 정해진 값의 공간만을 사용하라고 명령을 내리는 것. 20dp 와 같이 특정값이 정해져 있는 경우가 이 경우. 




AT_MOST


최대 상한선을 정해준 상태에서 자식 뷰에게 해당선을 넘지 않는 범위에서 영역을 결정하도록 한다.







이는 부모뷰가 MeasureSpec 클래스를 통해 제안사항을 기록하여 자식뷰의 measure( int, int ) 함수를 호출하여 제안을 전달한다. 자식뷰는 부모가 전달한 값을 참고하여 자신의 너비와 높이 값을 부모뷰에 전달한다. 


부모뷰가 자식뷰들이 원하는 값들을 확인하여 문제가 없다면 바로 그리기에 들어간다. 하지만 자식뷰가 제시한 영역보다 더 넓은 값을 전달할 경우, 여러번에 걸쳐서 measure 단계를 거친다. 이때 MeasureSpec 값은 계속 바뀐다. 


measure 단계가 지나면 layout 단계를 통해 위치를 잡아준다.


그리고 마지막으로 각 view 들의 ondraw 가 호출되며 실제 뷰가 그려진다. 



반응형

댓글