티스토리 뷰

android

[android] CustomView

tbMaster 2020. 6. 1. 14:05
반응형

CustomView 는 자주 사용하고, 또 면접에서도 많이 물어보는 것 같다.

이참에 제대로 알아두자 !! 해서 강의 듣고 정리해봄 !! 

 

강의 : Tacademy - Android Application 프로그래밍 중급 19강 Custom View | T아카데미

https://www.youtube.com/watch?v=0Yccqj5tm6s 

문서 : https://developer.android.com/guide/topics/ui/custom-components?hl=ko


CustomView 개요

Android는 기본 레이아웃 클래스 View 및 ViewGroup에 기반하여 UI를 구축할 수 있는 정교하고 강력한 구성요소화된 모델을 제공합니다. 우선 플랫폼에는 UI를 구성하는 데 사용할 수 있는 미리 빌드된 다양한 View 및 ViewGroup 서브 클래스(위젯, 레이아웃)가 포함되어 있습니다. 만약, 빌드된 위젯 또는 레이아웃이 맞지 않는다면, View 서브클래스를 직접 만들 수 있습니다. - AndroidDeveloper : 맞춤 뷰 구성요소의 개요 내용 중 일부

 

 

View 속성 정의 및 사용 방법

view를 생성하기 위해서는 먼저 xml에 view에 대한 속성을 정의해야 함.

이렇게 정의한 xml파일 내에 있는 속성들을 LayoutInflater가 읽어들여서 AttributeSet 에 담음.

AttributeSet을 이용하여 View를 생성함.

->View(Context context, AttributeSet attrs)

또는, 

Theme에 있는 defStyleAttr 속성을 이용하여 View를 생성할 수 있음. 

(defStyleAttr : 기본으로 설정되어 있는 속성들의 집합. - Ex : Button의 크기, 이미지, 색상, ... )

->View(Context context, AttributeSet attrs, int defStyleAttr)

 

안드로이드의 그리기 과정 

1) View의 크기를 결정 -> measure

- 크기를 결정하기 위해 measure 함수를 호출하면, onMeasure()가 호출되어 크기를 결정(크기 계산)

- 크기를 결정(계산)했으면, 계산된 결과를 설정해야 하는데 setMeasuredDimension을 호출하여 설정함.(나의 width는 ~고 Height는 ~야 라고 설정)

- 다시 크기를 재계산해야 할 경우, requestLayout 을 호출한 후에 크기 재결정.

2) Content를 특정 위치에 배치 -> layout 

- 크기를 결정했고 배치하기 위해서 layout을 호출하면, onLayout()이 호출되어 ViewGroup에서는 Child의 위치를 결정

3) View 그리기 -> draw 

: 이후부터는 draw만 호출 ( 크기가 변경되기 전까지 ... ) 

- draw는 그리기 기능을 하는 함수로 background를 그림.

- onDraw()를 호출하여 자신의 그림을 그림 

- dispatchDraw를 호출하여 child에 대한 그리기를 해 줌.

- 다시 그릴경우 invalidate()를 호출

 

* 크기 결정 - measure

public final void measure(int widthMeasureSpec, int heightMeasureSpec)

- View의 크기를 결정해달라고 요청할 때 사용됨

- widthMeasureSpec, heightMeasureSpec 은 크기 결정에 있어 사용할 제한 조건임 

( Ex : 너 맘대로 결정해라, 아무리 커도 부모 크기 내로 결정해라, 너의 크기는 이거다, ... )

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

- widthMeasureSpec, heightMeasureSpec 을 기반으로 View의 크기 결정 

- View의 크기가 결정되면 setMeasuredDimension 호출해야 함.

 

View의 상태 저장 및 복원

앱의 Process가 갑자기 죽을 것을대비해서 값을 저장해 놓을 수 있도록 제공

onSaveInstanceState() : View의 상태를 저장하는 Parcelable을 생성하고 넘겨줌

onRestoreInstanceState() : 파라미터로 넘어온 Parcelable로부터 View의 값을 복원

View.BaseSavedState

- View의 상태를 저장한 Parcelable을 만들기 위해 사용되는 class.

 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함