나만의 View 만들기
View들 조합 / Group View
• View 여러 개를 포함하고 있다는 것은
Layout 객체를 통해서 구성하고 있다는 것
을 의미
• 구현을 위해서 Layout을 상속해서 신규
View를 정의해서 반복 사용 가능.
View Group 샘플
하나 그룹으로 여러 곳에서
사용하고 싶다.
기존 View에 attribute 추가
• 추가로 필요한 Attribute가 있다면, 이를
받아서 처리할 수 있도록 View를 준비.
• 대부분 경우에 기존 View 기능 유지를 하
면서 field 확장 경우에는 상속을 해서 관
련 attribute를 가져오도록 구현
Attribute 추가하기 예제
XML 정의
NS에서는 package name으로
Custom Attribute
추출해서 사용
Activity에서 View를 낳고
• Activity 생명 주기 중 onResume 이후에
• View의 onDraw / onMeasure / onLayout
호출이 이루어집니다.
– onDraw: View 자체를 그리는 역할
– onMeasure: 내가 차지하고자 희망하는 공간
을 부모에게 알려주는 역할
– onLayout: 만약 자식 View들이 있을 때, 이들
에게 크기와 위치를 할당 할 때 사용합니다.
즉, 자식 View가 없으면 사용하지 않습니다.
onMeasure에 대해서 좀 더
• void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
– 특정 View가 차지하게 될 크기에 대해서는 Parent가 하위 View와 협상
을 하게 됩니다. 이 과정에서 Parent가 하위 View에게 “늬 얼마만큼 사
이즈를 희망하니?”하고 묻는 것이 onMeasure 입니다.
– Void로 반환 값은 없지만, 질문 받은 View는 아래 함수 호출해서 자신
의지를 밝힙니다.
• setMeasuredDimension (int measuredWidth, int measuredHeight)
– 인자로 넘겨 받은 width/heightMeasureSpec은 모드와 실제값을 합쳐져
서 구성이 됩니다.
• 상위 2 bit: 모드를 나타냄. AT_MOST (최대), EXACTLY (정확히), UNSPECIFIED (미지정)
• 나머지 32 bit: 실제 값을 의미
• getMode / getSize / makeMeasureSpec
onMeasure 후 onDraw
• 상위 View에서 전체적으로 onMeasure를 통해서 서로 필요한
공간에 대해서 협의를 하고 최종 사이즈를 결정한 뒤에 각
View에게 이제 그리라고 이야기 합니다.
• 이렇게 onDraw를 시작.
– 상위 Activity.onResume > onMeasure > onDraw 순으로 수행
• onDraw를 통해서 원하는 view를 그리고, 강제로 그리고자 하
는 경우에는 invalidate 함수를 호출.
– 만약 자신이 onDraw를 하는 경우가 있을 때에는
setWillNotDraw 함수 값을 명확히 설정해 주는 것이 권장됩니다.
19 나만의 view 만들기

19 나만의 view 만들기

  • 1.
  • 2.
    View들 조합 /Group View • View 여러 개를 포함하고 있다는 것은 Layout 객체를 통해서 구성하고 있다는 것 을 의미 • 구현을 위해서 Layout을 상속해서 신규 View를 정의해서 반복 사용 가능.
  • 3.
    View Group 샘플 하나그룹으로 여러 곳에서 사용하고 싶다.
  • 4.
    기존 View에 attribute추가 • 추가로 필요한 Attribute가 있다면, 이를 받아서 처리할 수 있도록 View를 준비. • 대부분 경우에 기존 View 기능 유지를 하 면서 field 확장 경우에는 상속을 해서 관 련 attribute를 가져오도록 구현
  • 5.
    Attribute 추가하기 예제 XML정의 NS에서는 package name으로 Custom Attribute 추출해서 사용
  • 6.
    Activity에서 View를 낳고 •Activity 생명 주기 중 onResume 이후에 • View의 onDraw / onMeasure / onLayout 호출이 이루어집니다. – onDraw: View 자체를 그리는 역할 – onMeasure: 내가 차지하고자 희망하는 공간 을 부모에게 알려주는 역할 – onLayout: 만약 자식 View들이 있을 때, 이들 에게 크기와 위치를 할당 할 때 사용합니다. 즉, 자식 View가 없으면 사용하지 않습니다.
  • 7.
    onMeasure에 대해서 좀더 • void onMeasure (int widthMeasureSpec, int heightMeasureSpec) – 특정 View가 차지하게 될 크기에 대해서는 Parent가 하위 View와 협상 을 하게 됩니다. 이 과정에서 Parent가 하위 View에게 “늬 얼마만큼 사 이즈를 희망하니?”하고 묻는 것이 onMeasure 입니다. – Void로 반환 값은 없지만, 질문 받은 View는 아래 함수 호출해서 자신 의지를 밝힙니다. • setMeasuredDimension (int measuredWidth, int measuredHeight) – 인자로 넘겨 받은 width/heightMeasureSpec은 모드와 실제값을 합쳐져 서 구성이 됩니다. • 상위 2 bit: 모드를 나타냄. AT_MOST (최대), EXACTLY (정확히), UNSPECIFIED (미지정) • 나머지 32 bit: 실제 값을 의미 • getMode / getSize / makeMeasureSpec
  • 8.
    onMeasure 후 onDraw •상위 View에서 전체적으로 onMeasure를 통해서 서로 필요한 공간에 대해서 협의를 하고 최종 사이즈를 결정한 뒤에 각 View에게 이제 그리라고 이야기 합니다. • 이렇게 onDraw를 시작. – 상위 Activity.onResume > onMeasure > onDraw 순으로 수행 • onDraw를 통해서 원하는 view를 그리고, 강제로 그리고자 하 는 경우에는 invalidate 함수를 호출. – 만약 자신이 onDraw를 하는 경우가 있을 때에는 setWillNotDraw 함수 값을 명확히 설정해 주는 것이 권장됩니다.