반응형
안드로이드, 뷰가 그려지는 과정( 부모뷰 vs 자식뷰 ) |
부모뷰는 자식뷰가 ViewGroup 에 추가될 때 넘겨 받은 LayoutParams 값을 기반으로 자식 View 에게 다음 3가지 방식 중 한 가지 방식을 통해 필요한 영역 크기를 물어본다.
UNSPECIFIED.
자식에게 원하는 값을 마음껏 적어 내라는 것. wrap_content 의 경우 부모뷰는 자식뷰가 얼마나 많은 공간이 필요한지 알 수 없다. 따라서 자식뷰에게 꼭 물어봐야 한다.
EXACTLY
자식에게 정확히 정해진 값의 공간만을 사용하라고 명령을 내리는 것. 20dp 와 같이 특정값이 정해져 있는 경우가 이 경우.
AT_MOST
최대 상한선을 정해준 상태에서 자식 뷰에게 해당선을 넘지 않는 범위에서 영역을 결정하도록 한다.
이는 부모뷰가 MeasureSpec 클래스를 통해 제안사항을 기록하여 자식뷰의 measure( int, int ) 함수를 호출하여 제안을 전달한다. 자식뷰는 부모가 전달한 값을 참고하여 자신의 너비와 높이 값을 부모뷰에 전달한다.
부모뷰가 자식뷰들이 원하는 값들을 확인하여 문제가 없다면 바로 그리기에 들어간다. 하지만 자식뷰가 제시한 영역보다 더 넓은 값을 전달할 경우, 여러번에 걸쳐서 measure 단계를 거친다. 이때 MeasureSpec 값은 계속 바뀐다.
measure 단계가 지나면 layout 단계를 통해 위치를 잡아준다.
그리고 마지막으로 각 view 들의 ondraw 가 호출되며 실제 뷰가 그려진다.
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] AsyncTask 의 cancel 에 대한 이야기. 변태야 ㅠ (0) | 2013.08.18 |
---|---|
[Java] 왜 InputStream 의 read() 는 byte 가 아닌 int 를 반환하는가? (0) | 2013.08.18 |
[android] Animation 시 WebView Drawing 이 제대로 안 되는 현상. (2) | 2013.08.17 |
[Java] Interface 에서 몰랐던 사실. 상수 정의. (0) | 2013.08.16 |
[android] activity flag 이야기 (0) | 2013.08.16 |
댓글