모든 뷰는 생성자에서 출발하게 됩니다.
생성자에서 초기화되고, default 값을 설정합니다.
뷰는 초기설정을 쉽게 세팅하기 위해서 AttributeSet 이라는 인터페이스를 지원합니다.
attrs.xml 파일(res/values/attrs.xml)을 만들어 이것을 부름으로서 뷰의 설정값을 쉽게 설정할 수 있습니다.
부모 뷰가 addView(childView)를 호출한 뒤 자식뷰는 윈도우에 붙게 됩니다.
이때 뷰의 id를 통해 접근할 수 있습니다.
뷰의 크기를 측정하는 단계로 중요합니다.
레이아웃에 맞게 특정 크기를 가져가야 합니다.
여기서는 세 가지의 단계가 있는데
뷰의 위치와 크기를 할당합니다.
onMeasuer를 통해 사이즈가 결정된 후에 onLayout이 불립니다.
부모뷰일때 주로 쓰이며, child 뷰를 붙일 때 위치를 정해주는데 사용합니다.
넘어오는 파라미터는 어플리케이션 전체를 기준으로 위치가 넘어옵니다. (주의)
뷰를 실제로 그리는 단계입니다.
Canvas와 Paint를 이용하여 필요한 내용을 그립니다.
여기서 주의할 점은 onDraw 함수를 호출시 많은 시간이 소요됩니다.
Scroll 또는 Swipe 등을 할 경우 뷰는 다시 onDraw와 onLayout을 다시 호출하게 됩니다.
따라서 함수 내에서 객체할당을 피하고 한 번 할당한 객체를 재사용할 것을 권장합니다.
퍼센티지를 보여주는 숫자 0~100과 그에 맞는 퍼센티지를 원으로 보여주는 뷰를 그립니다.
invalidate를 통하여 1초마다 갱신하여 다시 그립니다.