안드로이드 ( 초급 ) - PowerPoint PPT Presentation

angeni
slide1 n.
Skip this Video
Loading SlideShow in 5 Seconds..
안드로이드 ( 초급 ) PowerPoint Presentation
Download Presentation
안드로이드 ( 초급 )

play fullscreen
1 / 90
Download Presentation
안드로이드 ( 초급 )
1244 Views
Download Presentation

안드로이드 ( 초급 )

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. 안드로이드(초급) eastflag@gmail.com 010-3010-1482 이동기

  2. 0. 개요 과정 소개 • - 강사 소개 • * 연세대 전자공학과 / 연세대학원 전자공학과 컴퓨터네트워크 전공 • * KTF 선행연구소 근무-멀티캐스트 프로토콜 연구 및 관련 특허 3건 국내 출원/등록, 해외출원/등록 '무선 이동 통신망에서 멀티캐스트 구현을 위한 아이지엠피 메시지 처리 방법 및 장치''이동통신망에서 고효율의 데이터 전송을 위한 멀티캐스트 라우팅 방법 및 시스템''이동통신망에서 리다이렉션 페이지 개선을 통한 성능 향상 방법 및 장치'* KT엠하우스 개발본부 근무-114 지역 검색 서비스 프로젝트(jsp)-MMS 광고 플랫폼 구축 프로젝트(jsp/springframework)MMS관련 국내 특허 3건 출원 및 등록-KTF 종합광고서비스 플랫폼 구축 프로젝트(c# with .NET)-기프티쇼 서비스 프로젝트(jsp/springframework)* 파스텔커뮤니케이션 개발이사 근무- 다수 안드로이드앱 개발 및 프로젝트 참여'실시간 대기오염 앱', '척추건강체크 앱', '오르골앱' 개발'나인뮤지스', 'VNT' 스타 홍보 앱 개발'포미닛/비스트 슬라이딩 퍼즐', '포미닛/비스트틀린그림찾기' 게임 개발'포미닛/비스트정시알람' 스타 소재 위젯 개발'LG전자 클라우드 포토다이어리 프로젝트'* 현재LG전자 단말 탑재 안드로이드앱 개발 프로젝트 참여중

  3. - 참고 교재 안드로이드SDK Sample 안드로이드 프로그래밍 정복(한빛미디어, 김상형 저) Do it 안드로이드앱 프로그래밍(이지스퍼블리싱, 정재곤 저) 참고교재 & 사이트 http://www.youtube.com/user/thenewboston (유튜브, thenewboston, 각종강좌) http://www.youtube.com/user/CornboyzAndroid(안드로이드 강좌) http://www.youtube.com/user/easyspub (이지스퍼블리싱, 안드로이드, 유튜브강좌) http://cafe.naver.com/easyispub/945 (카페, 이지스퍼블리싱) * 이동기 - 학력 연세대 전자공학 학사, 연세대 전자공학/컴퓨터네트워크 석사 - 정규직 KTF/KT엠하우스/파스텔커뮤니케이션 -프리랜서 안드로이드/안드로이드게임 강의 java, jquery, jsp/servlet, oracle, ibatis/mybatis, SpringFramework강의 LG전자 안드로이드 프로젝트 참여중(현재) 0. 개요 과정 소개

  4. 0. 개요 과정 소개 • 1일차 • - 안드로이드 개발환경 세팅 • - 프로젝트 구조 분석 • 2일차 • - 레이아웃 관리 • LinearLayout • Relativelayout • Framelayout • 3일차 • - 안드로이드 출력 • -캔버스 • -그리기 객체 • -토스트, 진동 • 4일차 • - 입력 • 터치입력 • 키보드 입력- • 5일차 • 기본위젯 • 버튼 • 텍스트뷰 • 이미지뷰 • 6일차 • 어댑터뷰 • 리스트뷰 • 7일차 • 고급 위젯 • 프로그레스바 • WebView • 8일차 • - 커스텀위젯 • 기존 위젯 변형 • 새로운 위젯 • 9일차 • - 리소스관리 • 10일차 • 액티비티 • 생명주기 • 11일차 • 쓰레드 • 핸들러 • 12일차 • 고급 그리기 • 변환 • surfaceview • 13일차 • - 애니메이션 • 프레임 애니메이션 • 트윈 애니메이션 • 14일차 • 파일 • - 프레프런스 • 15일차 • SQLite • Content Provider • 16일차 • - 네트워크 • - DOM, SAX • 17일차 • 통지 • 서비스 • 브로드캐스트 • 18일차 • - 제스처 • 19일차 • 구글맵 • 맵뷰 • 오버레이 • 20일차 • 오디오 • 비디오 • 미디어DB • 21일차 • 센서활용 • 전원관리 • 22일차 • 전화 • SMS • 23일차 • 앱위젯

  5. 0. 개요 과정 소개 • UI (View) • - 레이아웃만들기 • XML로 만들기 • 소스코드에서 동적생성 • - 뷰와뷰그룹 • 프라퍼티 이해 • LinearLayout • Relativelayout • - 출력 • 그리기 : Bitmap, Canvas • 토스트, 진동 • - 입력 • 터치입력, 키보드 입력 • - 기본위젯 • 버튼, 텍스트뷰, 이미지뷰 • - 고급위젯 • 어댑터뷰 • 프로그레스바 • Webview • - 고급그리기 • 필터 • - 애니메이션 • 프레임/트윈 애니메이션 Control - 쓰레드(자바) - 핸들러(안드로이드) - 쓰레드+ 핸들러 - 저장 Control 파일 프레퍼런스 SQLite - 네트워크 DOM, SAX, PULL 파싱 - 구글맵 맵뷰, 오버레이 - GCM Model (Android Data) - 인텐트 - 4대 컴포넌트 액티비티 서비스 브로드캐스트 컨텐트프로바이더 - 통지 - 미디어 DB - 센서활용 - 전원관리 - 전화, SMS

  6. 안드로이드 실습 프로젝트---------------------------------------------------- http://14.63.161.16/android/LayoutProject.zip 레이아웃 프로젝트 http://14.63.161.16/android/OutputProject.zip 출력(그리기, 커스텀토스트, 진동) 프로젝트 http://14.63.161.16/android/EventProject.zip 클릭/터치 관련 프로젝트 http://14.63.161.16/android/ListViewProject.zip ListView 프로젝트 http://14.63.161.16/android/CustomViewProject.zip 커스텀뷰 프로젝트 http://14.63.161.16/android/AnimationProject.zip 애니메이션 프로젝트 http://14.63.161.16/android/ActivityProject.zip 액티비티, 인텐트필터프로젝트 0. 개요 과정 소개

  7. http://14.63.161.16/android/ThreadProject.zip Handler, Thread 프로젝트 http://14.63.161.16/android/InputProject.zip sqlite, sharedpreference프로젝트 http://14.63.161.16/android/ServiceProject.zip 서비스, 브로드캐스트 프로젝트 http://14.63.161.16/android/MapviewProject.zip 구글맵 프로젝트 http://14.63.161.16/android/ServiceProject.zip 통지, BroadCast, Service 컴포넌트 프로젝트 http://14.63.161.16/android/WebviewProject.zip 모바일웹, 하이브리드앱, 네이티브앱 프로젝트 0. 개요 과정 소개

  8. 0. 개요 개발환경 세팅 eclipse 설치 (자바개발툴) 안드로이드 SDK 설치 ADT(안드로이드개발툴) (eclipse plug-in) JDK 설치 1. JDK 설치 및 환경 설정 http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK 1.6 설치자바 환경 설정(시스템변수에 JAVA_HOME 추가 및 path 설정)2. 이클립스(eclipse) 설치 및 설정 (자바 개발 소프트웨어)http://www.eclipse.org/downloadsEclipse IDE for JAVA EE Developersd:\LDK\eclipse 폴더에 이클립스 다운로드 및 실행 (LDK는 사용자 임의 폴더)d:\LDK\workspace에 작업공간 설정* workspace란? 안드로이드 개발 혹은 jsp웹개발, 스프링프레임웍 개발 등 해당 개발환경에 맞는 여러가지플러그인을 설치하여 작업하는 공간3. 안드로이드SDK 다운로드, 설치 및 설정http://developer.android.com/사이트 접속, Develop -> Toos -> Download ->Download the SDK for Windows, 실행 d:\LDK\android-sdk 폴더에 인스톨eclipse 실행 Window -> preferences -> Android에 s아 location 위치를 d:\LDK\android-sdk 폴더로 설정SDK 매니저 실행하여 4.1 버전, 2.2버전 extra 버전 다운로드4. ADT(Android Develoment Tools) 플러그인 설치 (안드로이드 개발환경 plug-in)Eclipse 메뉴 Help -> Install New Software -> Add 버튼 클릭 -> 주소에 아래url을 넣고 엔터https://dl-ssl.google.com/android/eclipse

  9. 1일차 안드로이드실행환경 & 프로젝트 만들기 * 실행환경 Eclipse 4.2(Juno), Eclipse Plug-in : android ADT설치, 필요할 경우 tortoise SVN, gitHUB, JAD 설치 android SDK Manager로 android Sdk (2.2, 4.1, support library) 설치 * HelloProject만들기 File-> New -> Android Application Project (없다면 other에서 선택) Application Name : HelloProject Project Name : HelloProject Package Name : com.academy.green Build SDK : 4.1(api 16) Minimum Required SDK : 2.2(api 8) (안드로이드 실행을 위한 최소버전) * AVD 실행 AVD Manager로 에뮬레이터 만들기 Target은 2.2 Skin은 WVGA800 선택 ( hdpi해상도)

  10. 1일차 안드로이드 프로젝트 구조 프로젝트명 Src Gen (자동생성) Android 2.2 (안드로이드 버전) Android Dependencies (libs jar를 가지고 자동생성) Assets ( 이미지, 음악, 폰트, db등 자원 폴더) Bin (apk생성) Libs (jar 파일) Res (resource 폴더: drawable, layout) AndroidManifest.xml (4대 컴포넌트 명시, 퍼미션 등 환경 설정) Project.properties 안드로이드4대 컴포넌트 - Activity(화면) <- 레이아웃 - Service - ContentProvider - BroadCast Intent 로 통신

  11. 1일차 안드로이드Open Source project 실행해보기 1. 오픈 소스 프로젝트 검색아이폰 UI 인 page curl 프로젝트 검색http://code.google.com/p/에서 android page curl로 검색두번째 검색메뉴인 http://code.google.com/p/android-page-curl/로 이동source 클릭후svn주소를 기록2. Tortoise SVN 다운로드http://tortoisesvn.net/downloads.html에서프로그램 다운로드후 설치.workspace 폴더에서 마우스 우클릭 후 svn check out 클릭후 위에서 기록한 page curl 프로젝트 사이트를 넣고 엔터데이터가 저장됨.저장후eclipse에서 해당 프로젝트 import 시킴3. eclipse에서 해당 프로젝트 importeclipse 실행 File -> Import -> Existing Android Code into Workspace * 오류 해결 방법 workspace 안에 해당 프로젝트가 존재할 경우 import가 안되므로 다른 폴더로이동 OnClick쪽 override annotation 에러가 있을 경우 => Window -> Preference -> Java -> Compiler 에서 1.7을 1.6으로 변경

  12. 1일차 레이아웃 과 위젯 의 이해 1. 레이아웃(android.view.view <- android.view.viewgroup)LinearLayout RelativeLayout Framelayout2. 위젯(android.view.view <- android.widget)TextView, ImageView, EditBox, Button, ImageButton등=> 위젯은 레이아웃(그릇)에 담겨지는게 보통. 레이아웃은 하나 이상의 레이아웃을 포함가능

  13. 2일차 Layout속성 1. Linear Layout - orientation horizontal : 수평배열 vertical : 수직 배열 - layout_weight 비율대로 배치하기 0이나 없다면 비율계산에 미포함 버튼 버튼 버튼 버튼 버튼 버튼 vertical horizontal vertical 예제

  14. 2일차 RelativeLayout속성 Relative Layout - 부모와의 배치관계 - 다른뷰와의 배치관계 속성값: true or false 속성값: 다른뷰의 아이디 위에서 2개의 속성이 결정되면 가로와 세로가 결정 => 위치 고정

  15. 2일차 레이아웃 전개하기 (Inflation ,전개, 팽창) <LinearLayout… 01000101101010100011… inflation aapt 클릭 실제 객체 XML 문서 실행 화일 소스코드에서 뷰만드는(inflation) 방법 /* 1. XML 전개를 직접 하기 LayoutInflaterinflater = (LayoutInflater)getSystemService( Context.LAYOUT_INFLATER_SERVICE); LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.inflation, null); setContentView(linear); //*/ /* 2. 컨텍스트로부터전개자 구하기 LayoutInflaterinflater = LayoutInflater.from(this); LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.inflation, null); setContentView(linear); //*/ /* 3. View의 정적 메소드 사용하여 전개하기 LinearLayout linear = (LinearLayout)View.inflate(this, R.layout.inflation, null); setContentView(linear);

  16. 2일차 LinearLayout -코딩상에서 View 생성 방법 //메인 LinearLout생성 LinearLayoutmainLayout = new LinearLayout(this); mainLayout.setOrientation(LinearLayout.VERTICAL); //레이아웃에 버튼 배치하기 //1. 자기자신의 속성 설정 Button button01 = new Button(this); button01.setText("Button01"); //2. 배치 속성 설정 LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params1.gravity = Gravity.LEFT; //3. addView로 부모뷰에 붙이기 mainLayout.addView(button01, params1); XML 생성방법  코딩상 생성방법 항상 가능

  17. 2일차 View 속성 android.view.View android.widget.TextView android.widget.Button android.widget.EditText android.widget.ImageView

  18. 2일차 ViewGroup속성 android.view.ViewGroup android.widget.FrameLayout android.widget.LinearLayout android.widget.RelativeLayout android.widget.ListView

  19. 2일차 View 와 ViewGroup속성 속성(Property)의 종류 부모 View 자신의 속성 자기자신과 부모의 속성을 모두 가진다 예) Button의 경우 가질수 있는 속성 - Button의 속성 - Button의 부모 TextView속성 - TextView의 부모 View 속성 2. ViewGroup의 속성 * ViewGroup속성 View를 부모의 어디에 배치할것인가 속성 (layout_ 로 시작) layout_width: 넓이, layout_heigh : 높이 - match_parent : 부모의 주어진 크기를 다 채운다 - wrap_content : 내용물의 크기만큼 채운다 layout_gravity: 정렬 layout_margine : 마진값 * LinearLayout속성 - layout_weight : 정해진 weight 값으로 채운다 * RelativeLayout속성 - 배치 관련 parameters layout_below, - 정렬 관련 parameters layout_alignxxxx View TextView Button

  20. 2일차 View 속성 1-1View의 property - id : view의 고유한 값을 부여 xml : android:id=“@+id/이름” 코딩상에서 id값으로 레퍼런스 값을 찾을수 있다 => TextView tv01 = (TextView)findViewById(R.id.이름); background : 배경색 #ARGB, #RGB, #AARRGGBB 형식 padding : 내부에 간격 조정값 visibility : 보일것이지 결정 false or true - clickable : 마우스클릭받을것인지, - focasable : 키보드 포커스를 받을것인지 margin padding TextView

  21. 2일차 View 속성 1-2. TextViewproperty - View의 속성 상속 - gravity : 뷰안의 내용물을 정렬 - text : 텍스트 - textSize : 텍스트 크기 - textColor: 텍스트 색깔 - textStyle : 폰트의 속성을 지정, normal, bold, italic - singleline : 강제로 한줄로 출력하는 속성 1-3. ImageView property - View 속성 상속 - src : 출력할 이미지를 지정 - scaleType : 이미지를 출력시 확대, 축소 방식 지정 1-4 EditText Property - View 속성 상속 - TextView속성 상속 1-5. Button property - View 속성 상속 - TextView속성 상속

  22. 3일차 출력 - 그리기 * 커스텀뷰 생성 방법 View를 상속받아서 커스텀뷰를 만든다 class MyView extends View{ //코딩상에서 동적 생성시 필요한 생성자 public MyView(Context context) { super(context); } //XML에서 생성시 필요한 생성자 public MyView2(Context context, AttributeSetattrs) { super(context, attrs); } public MyView2(Context context, AttributeSetattrs, intdefStyle){ super(context, attrs, defStyle); } } 2-1 동적 생성 방법 MyView mv = new MyView(this); setContentView(mv); 2-2 XML에서 생성 방법 <com.green.outputproject.mywidget.MyView //full package name을 명시 android:layout_width="match_parent" android:layout_height="match_parent" />

  23. 3일차 출력 - 그리기 Canvas 도화지 개념 Paint 붓의 개념 Bitmap 사진 개념 도화지위에 Paint로 그림을 그린다 or 이미 그려진 사진(Bitmap)을 도화지 위에 붙인다는 개념으로 이해 Canvas 함수 void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) void drawCircle(float cx, float cy, float radius, Paint paint); Paint 함수 void setColor(int color) void setARGB(int a, int r, int g, int b) Canvas의 Bitmap 관련 함수 void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) void drawBitmap(Bitmap bitmap, Rectsrc, Rectdst, Paint paint)

  24. 3일차 출력 – 토스트, 비프음, 진동 * 커스텀 토스트 만들기 //1. inflate로 XML로 만들어진 layout 가져오기 LinearLayoutlinear = (LinearLayout) View.inflate(this, R.layout.my_toast, null); Toast toast = new Toast(this); toast.setView(linear); toast.show(); <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/my_border" android:orientation="horizontal" android:gravity="center"> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/test" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="커스텀 토스트입니다." /> </LinearLayout> <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#ffddffd9" /> <stroke android:color="#ff0066cc" android:width="4dp" /> <padding android:left="15dp" android:top="15dp" android:right="15dp" android:bottom="15dp"/> <corners android:radius="15dp"/> </shape>

  25. 3일차 출력 – Drawable Drawable GradientDrawable ColorDrawable PaintDrawable ShapeDrawable Shape XML과 소스코드로 모두 표현가능 RectShape OvalShape RoundShape

  26. 3일차 출력 – 토스트, 비프음, 진동 solid : 단색 채우기 gradient : 2가지 이상 색깔로 채우기 stroke : 테두리 그리기 corner : 코너 둥글게 하기

  27. 3일차 출력 – 토스트, 비프음, 진동 AndroidManifest.xml 파일에 퍼미션 추가 <uses-permission android:name="android.permission.VIBRATE"></uses-permission> Vibrator mVib; mVib = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE); mVib.vibrate(500); =>0.5초 진동 mVib.vibrate(new long[] {100, 50 , 200, 50 }, 0); =>첫번째 인수: 100ms 진동,50ms 쉬고, 200ms 진동,50ms 쉬고 두번째 인수: n번만큼 반복 (0이면 무한 반복)

  28. 4일차 입력 - 이벤트 핸들러 * 이벤트 메커니즘 이벤트 발생자 이벤트 처리자 : 이벤트 Listener, 이벤트 핸들러, delegator, callback => 이벤트 발생자는 이벤트 처리자에게 일을 처리하도록 맡긴다 이벤트 발생자 (Button1) 이벤트 처리자 (리스너) 일을 맡김 이벤트 발생자 (TextView1) 일을 맡김 (setOnClickListener) * 코딩 예 //이벤트리스너 생성 Button.OnClickListenermClickListener = new Button.OnClickListener() { public void onClick(View v) { //클릭 처리 } }; TextView tv01 = (TextView)findViewById(R.id.btn1); //이벤트 발생자가 이벤트처리자에게 일을 맡김 tv01.setOnClickListener(mClickListener);

  29. 4일차 이벤트 핸들러 종류

  30. 4일차 클릭 이벤트 구현 방법 다른사람의 코드 리딩 능력을 향상시키기 위해서 모든 구현방법을 알고 있어야 한다. 1. 콜백메서드 재정의 2. 리스너 인터페이스 구현 3. 액티비티가리스너 구현 4. 뷰가리스너 구현 5. 익명 이너클래스 사용 6. 익명 이너클래스의 임시객체 사용 7. XML에서 android:onClick속성 정의

  31. 4일차 입력 - 터치 이벤트 핸들러 우선순위 뷰의리스너 뷰의onTouchEvent콜백메서드 액티비티의onTouchEvent콜백메서드 리턴값의 의미 이벤트가 완전히 처리되었다면 true, 처리되지 않았다면 다음 순위의 핸들러를 찾기 위해 false를 리턴

  32. 4일차 터치 이벤트 예제 – 그림 그리기 1. Vertex 클래스 정의 - property x, y down, move event 점을 저장 - 그릴지 or 안 그릴지 정의 하는 isDraw n개의 점이 있으면 n-1개의 선분이 존재 2. Vertex를 저장하는 컬렉션 정의 3. 터치시 터치 점을 저장 down과 move시에만 저장 (down event는 최초에 한번만 발생) 4. 그리기 isDraw가 true이면 n-1 점에서 n점까지 그린다 move event 터치 move event down event move event 터치 종료 move event + up event

  33. 5일차 어댑터뷰- 종류

  34. 어댑터뷰– 리스트뷰 이해 5일차 MVC 디자인패턴 ListView (Parent) 원본 (ArrayList) MyItem객체(Icon,Name) . . 항목갯수는 200개 어댑터 0번 항목 요청 리턴 1번 항목 요청 리턴 convertView 2번 항목 요청 리턴 손가락으로 아래로 스크롤 가정 데이터 항목이 200개이고, 화면에는 항목이 3개가 보이고 아래로 스크롤한다고 가정 3번 항목 요청 리턴

  35. 5일차 어댑터뷰– 리스트뷰 실습 카드 52장을 아래 레이아웃으로 구성한 후 리스트뷰로 만들어보기 클로버 1 클로버 1 입니다. 클로버 1은 스페이드, 하트, 다이아몬드의 친구입니다 클로버 2 클로버 1 입니다. 클로버 1은 스페이드, 하트, 다이아몬드의 친구입니다 . . . 나인패치란? toos/draw9patch.bat

  36. 5일차 어댑터뷰- 리스트뷰실습 * Viewholer사용한 성능향상 기법 =>findViewById를 지속적으로 사용하지 않음으로써 성능 향상 Viewholder holder; if(convertView == null){ convertView= inflater.inflate(layout, parent, false); //Viewholder생성 convertView에 꼬리표 부착 holder = new Viewholder(); holder.ivCard= (ImageView)convertView.findViewById(R.id.ivCard); holder.tv1 = (TextView)convertView.findViewById(R.id.tv1); holder.tv2 = (TextView)convertView.findViewById(R.id.tv2); convertView.setTag(holder); } else { //꼬리표 가져오기 holder = (Viewholder) convertView.getTag(); } //홀더를 이용해서 리소스 할당 (holder.ivCard).setImageResource(getResources().getIdentifier(innerCard.get(position).fileName, "drawable", "com.green.listview")); (holder.tv1).setText("카드종류: " + innerCard.get(position).getKind()); (holder.tv2).setText("카드숫자: " + innerCard.get(position).getNumber());

  37. 5일차 어댑터뷰- ViewPager • * ViewPager어댑터뷰 • - ICS 부터 지원된 향상된 어댑터 뷰 • 그러나 안드로이드1.6 이후부터도 사용 가능하도록 support 라이브러리에도 포함되어있음. • View를 좌우로 스크롤할때 사용 • Gallery, ViewFlipper, ViewSwitcher등은 기존개발방식 • => ViewPager로 편리하고 기능적으로 구현 가능 • * 준비 단계 • - android-support-v4.jar libs 폴더에 복사 • (libs 폴더에 복사하면 안드로이드가 알아서 빌드패스를 잡아서 dependency폴더로 이동시킴) • * PagerAdapter상속 • getCount(): 현재 PagerAdapter에서 관리할 갯수를 반환 한다. instantiateItem(): ViewPager에서 사용할 뷰객체 생성 및 등록 한다.   • destroyItem(): View 객체를 삭제 한다.isViewFromObject(): instantiateItem메소드에서 생성한 객체를 이용할 것인지 여부를 반환 한다. • restoreState(): saveState() 상태에서 저장했던 Adapter와 page를 복구 한다. saveState(): 현재 UI 상태를 저장하기 위해 Adapter와 Page 관련 인스턴스 상태를 저장 합니다. startUpdate(): 페이지 변경이 시작될때 호출 됩니다.finishUpdate(): 페이지 변경이 완료되었을때 호출 됩니다.

  38. 5일차 어댑터뷰– ViewPager페이지 인디케이터 구현방법 * ViewPager리스너 구현 mPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { //구현부 } }

  39. 5일차 실습1 – ViewPager인디케이터 구현 상단 인디케이터는5페이지로 구성. 첫페이지에서둘째페이지로 이동하면 상단 인디케이터의두번째바가 빨간색으로 변하고 해당 페이지로 이동하면 해당 1) XML구성 : activity_view_pager.xml 파일 수정 - 상단에 하나의 LinearLayout을 추가하고 상하단 마진은 5dp, gravity를 center로 준다. - LinearLayout안에 5개의 TextView를 추가한다. id는 tvIndicator1 ~ tvIndicator5까지 할당, 넓이는 20dp, 높이는 3dp, 우측 마진은 5dp, background는 첫번째만 붉은색으로 나머지는 흰색으로 줘서 아래와 같이 구성

  40. 5일차 실습1 – ViewPager인디케이터 구현 ViewPagerActivity.java 수정 2) 변수 초기화 TextView아이디 tvIndicator1 ~ tvIndicator5까지 전역 변수 선언 init() 함수 내에서 findViewById함수로 xml에 선언된 메모리 주소값을 위에서 선언한 전역변수에 할당. 3-1) ViewPager인스턴스변수mPager에 페이지 변경 리스너 추가 (setOnPageChangeListener함수) 3-2) 리스너에PageChangerListener인터페이스의 Anonymous Inner Type 구현 3-3) onPageSelcted추상 메서드에서인디케이터로직 구현 변경된 페이지의 인덱스(position)을 얻어와서 인덱스에 해당하는 tvIndicator변수의 배경색을 바꾸는 setBackGround() setter 함수를 호출하여 해당색깔을 바꾼다. setter 함수의 파라메터는Color.Black or Color.Red사용

  41. 5일차 실습2 – ListView ListView항목에 버튼을추가하고 버튼 클릭시 해당 버튼의 클릭 이벤트 주기 1) 항목 뷰 수정 - list_card.xml 우측에 버튼 추가 id : btnCard 카드종류 1 클로버 1 카드숫자 1 2) Viewholder수정 버튼 항목을 추가, 변수 이름은 btnCard로 선언 3) MyAdapter수정 3-1) getView() 함수 수정 convertview가 null이면 1번에서 생성한 레이아웃의 button항목을 findViewByid() 함수로 찾아서 2번에서 생성한 Viewholder에 추가한다. 3-2)convertView가 null이 아니면 3-1에서 추가한 holder에서 btnCard를 찾아서 할당한다. btnCard의 setter 함수 setText()를 사용하여 현재 카드 종류와 숫자를 세팅한다. 1이면클로버, 2면 하트, 3이면 다이아몬드, 4면 스페이드를 리턴하도록 한다.

  42. 5일차 실습2 – ListView • vo패키지에 CardManager클래스를 추가하고 static StringgetKind(int kind) 함수를 구현하는것이 바람직함. • 4) btnCard에 클릭 이벤트를 설정하여 클릭시 버튼의 Text가 클릭되었다는것을toast 메시지로 뿌려주기. setOnClickListener함수 구현후OnClickListener인터페이스를 Annonymous Inner Type 으로 구현한다. • => 이때 holder에서 에러가 나는것을 확인하고 그 이유를 파악 • Viewholder를 inner 클래스가 아니라 액티비티의인스턴스 • 변수로 수정한다. • (* 리스트뷰에 항목 선택 이벤트와 다른점: • 리스트뷰에 항목 선택 이벤트는 이벤트를 하나 추가하는것인데 • 비해서, 이것은 항목마다 이벤트, 즉 52개의 이벤트를 설정)

  43. 6일차 WebView * WebKit : 웹브라우저가웹페이지를렌더링할 수 있게 해주는 엔진

  44. 6일차 WebView * 모바일웹앱 리모트 서버로딩 로컬파일 로딩 * WebView위젯 - 안드로이드 버전 2.2부터 지원 - webkit라이브러리 지원 안드로이드뷰 웹뷰

  45. 6일차 WebView * Back Key 처리 - 화면 컴포넌트가 하나이므로 백키 누르면 화면 종료가 일어남 - 웹 페이지가 더 이상 되돌아 갈수 없으면 종료 메시지 출력 //키보드 백버튼 처리 @Override public void onBackPressed() { //더이상 뒤로 갈 수 없으면 종료 메시지 출력 if (web1.canGoBack()) { web1.goBack(); } else { new AlertDialog.Builder(this). setTitle("선택하세요") .setMessage("프로그램을 끝낼까요?") .setIcon(R.drawable.ic_launcher) .setPositiveButton("NO", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton("YES", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }) .show(); }

  46. 6일차 WebView * 하이브리드 웹 웹에서 네이티브메서드 호출, 네이티브에서 웹 호출 안드로이드-> 웹 자바스크립트 함수 호출 웹자바스크립트 -> 안드로이드 함수 호출 • handler.post(new Runnable() { • @Override • public void run() { • //애니메이션 초기화 • ViewGroupcontainer = (ViewGroup) findViewById(R.id.container); • float centerX = container.getWidth() / 2.0f; • float centerY = container.getHeight() / 2.0f; • Rotate3dAnimation rot = new Rotate3dAnimation(0f, 180f, centerX, centerY, 0f, true); • rot.setDuration(1000); • container.startAnimation(rot); • } • });

  47. 6일차 WebView • * PhoneGap플러그인 테스트 • - eclipse market에서 phonegap으로 검색해서 설치 • - New -> PhoneGap for Android Project • - phonegap SDK와 jquery Mobile SDK는 built-in 사용 • - mamefest.xml 오류시 해당 screen 삭제 • jquery mobile 라이브러리 오류시 해당 줄 삭제 • 내부 링크 클릭시“Error Loading page” • a 링크 내부에 rel=“external” 삽입 • jquery mobile 프레임웍은 기본적으로 모든 Ajax 페이지를 내비게이션할때해쉬를 사용하므로 외부링크일 경우에 삽입

  48. 6일차 응용: 계산기만들기– LinearLayout, TextView로 구성 LinearLayout, vertical LinearLayout, horizontal 7 8 9 + 4 5 6 - = 이외 버튼 클릭시 텍스트 상자에 글자가 덧붙여서 쓰지고= 누를때 처리완료라고 함 1 2 3 * 0 . = /

  49. 6일차 응용: 계산기만들기– RelativeLayout, Button으로 구성 RelativeLayout tv1 layout_alignParentLeft, layout_alignParentTop 7 8 9 + 배치: layout_below=tv1 정렬: layout_alignLeft=tv1 4 5 6 - 배치: layout_toRightOf=7 정렬: layout_alignBottom=7 1 2 3 * 0 . = /

  50. 응용: 계산기 프로젝트 6일차