SlideShare a Scribd company logo
나만의 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 만들기

More Related Content

PDF
[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)
PDF
Wot(daliworks) 20131113
PDF
NIPA SW Insight Report '13.08
PDF
Agile Spirit Base On The Book "Agile Samuari"
PDF
Uml intro 1
PDF
Uml intro 0
PDF
21 application and_network_status
PDF
20 handler and_async_task
[NEXT] Android 개발 경험 프로젝트 2일차 (Intent, ListView, Adapter)
Wot(daliworks) 20131113
NIPA SW Insight Report '13.08
Agile Spirit Base On The Book "Agile Samuari"
Uml intro 1
Uml intro 0
21 application and_network_status
20 handler and_async_task

More from 운용 최 (20)

PDF
18 안드로이드 리스트뷰_속도향상
PDF
17 adapter view & db
PDF
16 데이터 저장과 사용
PDF
15 content provider
PDF
14 broad castreceiver
PDF
13 service 좀더
PDF
12 service
PDF
11 tablet 대응 가이드
PDF
10 view orientation_change
PDF
09 android keyboard & layout
PDF
08 fragment 태블릿 대응
PDF
08 font size
PDF
07 다양한 device_대응_방법
PDF
06 activity stack and back, flag
PDF
05 pending intent
PDF
04 activity간에 호출하기 & intent
PDF
03 activity.finish
PDF
02 activity.lifecycle
PDF
안드로이드 로그 파일로 남기기
PPTX
다양한 Device 대응_방법
18 안드로이드 리스트뷰_속도향상
17 adapter view & db
16 데이터 저장과 사용
15 content provider
14 broad castreceiver
13 service 좀더
12 service
11 tablet 대응 가이드
10 view orientation_change
09 android keyboard & layout
08 fragment 태블릿 대응
08 font size
07 다양한 device_대응_방법
06 activity stack and back, flag
05 pending intent
04 activity간에 호출하기 & intent
03 activity.finish
02 activity.lifecycle
안드로이드 로그 파일로 남기기
다양한 Device 대응_방법
Ad

19 나만의 view 만들기

  • 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 함수 값을 명확히 설정해 주는 것이 권장됩니다.