CHAP 6. 이벤트 처리.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

이벤트 처리  GUI 운영체제는 이벤트 드리븐으로 동작한다.  사용자와 상호 작용하려면 이벤트를 매끄럽게 처리하는 기술이 필요하다.  안드로이드에는 이벤트를 처리하는 다양한 방법이 있다.  팀 작업을 위해 모든 방법을 숙지해야 하며 자바의 고급 문법이 사용된다.
6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
삼성소프트웨어멤버십 20 th 박희근 ( A n d r o i d.
Android Application 데이터베이 스. 데이터베이스 활용하 기  안드로이드에 쓰이는 DBMS 의 이름은 SQLite.  SQLite 는 경량의 임베디드 데이터베이스 엔젠이며, 아이폰, 파이어폭스 등 여 러 곳에서 이미 많이 채택된 검증된 엔진이다. 
Unlocking Android 안드로이드 패키지 (1/2) 2 Unlocking Android 안드로이드 패키지 (2/2) 3.
CHAP 3. 첫번째 애플리케이션 예제 #1: text 문자를 출력 예제 #2: UI를 XML로 표현 – main.xml
6 메 뉴.
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
OpenCV 안드로이드 연동 환경설정 OpenCV-Android 를 다운 받습니다.
CHAP 8. 그래픽.
CHAP 18. 멀티미디어.
CHAP 10. 액티비티와 인텐트.
CHAP 10. 액티비티와 인텐트.
Android Programming 고급위젯
액션바와 네비게이션
Contents 학습목표 이벤트를 처리하는 여러 가지 형식과 각 형식의 장단점에 대해 상세하게 연구하고 기본적인 이벤트에 대한 실습을 한다. 사용자의 입력을 자유자재로 처리하기 위해서 반드시 습득해야 하는 중요한 기술 실습. 학습내용 이벤트 핸들러 여러 가지 이벤트.
10. 예외 처리.
04. 기본 위젯 익히기 제목. 04. 기본 위젯 익히기 제목 뷰와 뷰 상속을 이해한다. 기본 위젯을 다루는 방법을 익힌다. 안드로이드 앱의 기본적인 프로그래밍을 숙달한다.
Android Application 애플리케이션 위젯.
CHAP 19. 구글맵.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
○ 본 강의 자료는 이지스퍼블리싱(주)에서 제공하는 강의 교안입니다.
Contents 학습목표 이벤트를 처리하는 여러 가지 형식과 각 형식의 장단점에 대해 상세하게 연구하고 기본적인 이벤트에 대한 실습을 한다. 사용자의 입력을 자유자재로 처리하기 위해서 반드시 습득해야 하는 중요한 기술 실습. 학습내용 이벤트 핸들러 여러 가지 이벤트.
CHAP 7. 메뉴와 대화상자.
Contents 학습목표 Canvas와 Paint 객체를 통해 화면에 원하는 도형을 그리고 속성을 변경하는 기본적인 방법에 대해 소개한다. 토스트로 메시지를 출력하는 방법과 스피커를 통해 소리를 출력하는 방법에 대해서도 알아본다. 학습내용 캔버스 그리기 객체 쉐이더 그외.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Java Seminar 6.
첫 번째 애플리케이션 첫째 마당 - Chapter 03 Do It! 안드로이드 앱 프로그래밍 Jun. 2013
Ch.07-5 xml-rpc 사용하기 김상엽.
CHAP 4. 이벤트 처리.
19장 스윙과 이벤트 처리 Section 1 스윙 컴포넌트 Section 2 이미지 아이콘과 라벨
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
CHAP 11. 액티비티와 인텐트.
CHAP 7. 메뉴와 대화상자.
07. 메뉴와 대화상자 제목. 07. 메뉴와 대화상자 제목 메뉴를 작성하고 사용하는 방법을 배운다. 토스트의 다양한 출력 방법을 알아본다. 대화상자의 사용법을 익힌다.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
CHAP 8. 그래픽.
자바 5.0 프로그래밍.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
CHAP 6. 이벤트 처리.
CHAP 14. 데이터베이스와 환경 설정.
CHAP 13. 네트워크.
CHAP 12. 리소스와 보안.
7장 인터페이스와 추상 클래스.
Method & library.
CHAP 3. 첫번째 애플리케이션.
CHAP 5. 레이아웃.
CHAP 13. 서비스와 방송 수신자.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
10. 액티비티와 인텐트 제목. 10. 액티비티와 인텐트 제목 액티비티의 개념을 파악한다. 인텐트의 개념과 활용법을 익힌다. 액티비티 생명주기에 대해 알아본다.
2강_첫번째 안드로이드 프로젝트 에뮬레이터(AVD) 만들기 처음 만들어 보는 프로젝트 전체적인 구성 살펴보기
Power Java 제11장 상속.
3강_레이아웃-I 화면구성 요소 뷰에 대한 이해 LinearLayout Lecturer Kim Myoung-Ho
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
CHAP 5. 레이아웃.
CHAP 21. 전화, SMS, 주소록.
11. 어댑터뷰 제목. 11. 어댑터뷰 제목 리스트뷰와 그리드뷰 활용법을 배운다. 갤러리와 스피너의 사용법을 익힌다.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
05. 그래픽 빨간색 사각형 그리기 그래픽 그리기 발 표 자 : 07 정 경 오.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
CHAP 5. 메뉴와 대화상자.
Presentation transcript:

CHAP 6. 이벤트 처리

폴링과 이벤트 구동 방식

안드로이드에서의 이벤트 처리 방법 뷰 클래스의 이벤트 처리 메소드를 재정의 이벤트 처리 객체를 생성하여 컴포넌트에 등록 커스텀 뷰를 작성하는 경우: (예) 게임 이벤트 처리 객체를 생성하여 컴포넌트에 등록 일반적인 방법

이벤트 처리 메소드 재정의

재정의할 수 있는 콜백 메소드 onKeyDown(int, KeyEvent) onKeyUp(int, KeyEvent) onTrackballEvent(MotionEvent) onTouchEvent(MotionEvent) onFocusChanged(boolean, int, Rect)

예제 ... class MyView extends View { int key; String str; public MyView(Context context) { super(context); setBackgroundColor(Color.YELLOW); } public boolean onKeyDown(int keyCode, KeyEvent event) { str = "" + keyCode; invalidate(); return super.onKeyDown(keyCode, event); @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); canvas.drawText("키코드 = " + str, 0, 20, paint);

예제 public class MyViewEventActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyView w = new MyView(this); w.setFocusable(true); setContentView(w); } …

콜백 메소드를 재정의할 때 편리한 기능 [Source] → [Override/Implements Methods…] 사용!

이벤트 처리 객체 사용 버튼에 붙은 리스너 객체가 이벤트를 처리한다.

리스너의 종류

리스너 객체를 생성하는 방법 리스너 클래스를 내부 클래스로 정의한다. 리스너 클래스를 무명 클래스로 정의한다. 리스너 인터페이스를 액티비티 클래스에 구현한다. 가장 많이 사용되는 방법!

무명 클래스로 이벤트를 처리하는 예제 ... public class ButtonEvent2Activity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(getApplicationContext(), "버튼이 눌려졌습니다", Toast.LENGTH_SHORT).show(); } });

무명 클래스 클래스 몸체는 정의되지만 이름이 없는 클래스이다. 무명 클래스는 클래스를 정의하면서 동시에 객체를 생성하게 된다. 무명 클래스는 클래스를 정의하면서 동시에 객체를 생성하게 된다. class ClickListener implements OnClickListener { ... } obj = new ClickListener(); obj = new OnClickListener() { .... };

코드 분석 무명 클래스 사용 ... public class ButtonEvent2Activity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(getApplicationContext(), "버튼 눌려졌습니다", Toast.LENGTH_SHORT).show(); } });

XML을 이용한 이벤트 처리 메소드 이름을 적어준다. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="myClickListener" android:padding="10dp" android:text="버튼을 눌러보세요" /> </LinearLayout> 메소드 이름을 적어준다.

XML을 이용한 이벤트 처리 XML에서 호출된다. ... public class ButtonEvent4Activity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void myClickListener(View target) { Toast.makeText(getApplicationContext(), "버튼이 눌려졌습니다", Toast.LENGTH_SHORT).show(); XML에서 호출된다.

폼 위젯

에디트 텍스트 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:id="@+id/edittext" android:layout_height="wrap_content" /> </LinearLayout>

에디트 텍스트의 이벤트 처리 ... public class EditTextActivity extends Activity { @Override public void onCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final EditText edittext = (EditText) findViewById(R.id.edittext); edittext.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { Toast.makeText(getApplicationContext(), edittext.getText(), Toast.LENGTH_SHORT).show(); return true; } return false; });

체크 박스 XML로 체크 박스를 선언한다. ... <CheckBox android:id="@+id/checkbox" android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="check it out" />

체크박스의 이벤트 처리 ... final CheckBox checkbox = (CheckBox) findViewById(R.id.checkbox); checkbox.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 체크 박스가 클릭되면 호출된다. 체크 여부를 확인한다. if (((CheckBox) v).isChecked()) { Toast.makeText(CheckBoxTest.this, "Selected", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(CheckBoxTest.this, "Not selected", } });

라디오 버튼 XML로 라디오 버튼을 정의한다. ... <RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <RadioButton android:id="@+id/radio_red" android:layout_width="wrap_content" android:text="Red"/> android:id="@+id/radio_blue" android:text="Blue"/> </RadioGroup>

라디오 버튼의 이벤트 처리 ... public class RadioButtonTest extends Activity { private OnClickListener radio_listener = new OnClickListener() { public void onClick(View v) { RadioButton rb = (RadioButton) v; Toast.makeText(RadioButtonTest.this, rb.getText(), Toast.LENGTH_SHORT).show(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final RadioButton red = (RadioButton) findViewById(R.id.radio_red); final RadioButton blue = (RadioButton)findViewById(R.id.radio_blue); red.setOnClickListener(radio_listener); blue.setOnClickListener(radio_listener);

토글 버튼 XML로 라디오 버튼을 정의한다. ... <ToggleButton android:id="@+id/togglebutton"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:textOn="Vibrate on"   android:textOff="Vibrate off" />

토글 버튼 ... final ToggleButton togglebutton = (ToggleButton) findViewById(R.id.togglebutton); togglebutton.setOnClickListener(new OnClickListener(){ public void onClick(View v){ if(togglebutton.isChecked()){ Toast.makeText(ToggleButtonTest.this,"Checked", Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(ToggleButtonTest.this,"Not checked", Toast.LENGTH_SHORT).show() }});

레이팅바 XML로 라디오 버튼을 정의한다. ... <RatingBar android:id="@+id/ratingbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize="1.0" />

레이팅바 … public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final RatingBar ratingbar = (RatingBar) findViewById(R.id.ratingbar); ratingbar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { Toast.makeText(getApplicationContext(), "New Rating: " + rating, Toast.LENGTH_SHORT).show(); } });   }

커스텀 버튼 버튼 위에 텍스트 대신에 이미지가 그려져 있는 버 튼

커스텀 버튼 정의 XML로 버튼에 사용되는 이미지를 등록한다. /res/drawable/android_button.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/android_pressed" android:state_pressed="true" /> <item android:drawable="@drawable/android_focused" android:state_focused="true" /> <item android:drawable="@drawable/android_normal" /> </selector>

레이아웃 파일 레이아웃 파일에 버튼을 정의한다. /res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/android_button" android:padding="10dp" /> </LinearLayout>

커스텀 버튼 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(getApplicationContext(), "Beep Bop", Toast.LENGTH_SHORT).show(); } });  

키이벤트 키 이벤트를 받으려면 OnKeyListener 리스너를 구현 키를 누르면 사각형이 이동하는 예제를 작성하여 보 자.

커스텀 뷰를 정의 ... public class KeyEventActivity extends Activity { int x = 100, y = 100; protected class MyView extends View { public MyView(Context context) { super(context); setBackgroundColor(Color.YELLOW); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); canvas.drawRect(x, y, x+50, y+50, paint);

커스텀 뷰를 정의 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyView w = new MyView(this); w.setFocusable(true); w.setFocusableInTouchMode(true); setContentView(w); w.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_UP) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: x -= 30; break; case KeyEvent.KEYCODE_DPAD_RIGHT: x += 30; } v.invalidate(); return true; return false; }); }}

키 포커스 포커스를 가진 위젯 만이 키패드를 통하여 입력을 받을 수 있다.

키 포커스를 위젯에 설정하려면 w.setFocusable(true); w.setFocusableInTouchMode(true);

터치 이벤트 일반적으로 커스텀 뷰를 정의하고 onTouchEvent() 재정의 class MyView extends View { ... @Override public boolean onTouchEvent(MotionEvent event) { x = (int) event.getX(); y = (int) event.getY(); ... }

터치 이벤트의 종류

터치 이벤트 예제 public class TouchEventActivity extends Activity { protected class MyView extends View { int x = 100, y = 100; String str; public MyView(Context context) { super(context); setBackgroundColor(Color.YELLOW); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.MAGENTA); canvas.drawRect(x, y, x + 50, y + 50, paint); canvas.drawText("액션의 종류: " + str, 0, 20, paint);

터치 이벤트 예제 @Override public boolean onTouchEvent(MotionEvent event) { x = (int) event.getX(); y = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_DOWN) str = "ACTION_DOWN"; if (event.getAction() == MotionEvent.ACTION_MOVE) str = "ACTION_MOVE"; if (event.getAction() == MotionEvent.ACTION_UP) str = "ACTION_UP"; invalidate(); return true; } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyView w = new MyView(this); setContentView(w);

실행결과