280 likes | 453 Views
5. 입 력. 학습목표 이벤트를 처리하는 여러 가지 형식과 각 형식의 장단점에 대해 상세하게 연구하고 기본적인 이벤트에 대한 실습을 한다 . 사용자의 입력을 자유자재로 처리하기 위해서 반드시 습득해야 하는 중요한 기술 실습 . 내용 이벤트 핸들러 여러 가지 이벤트. 1. 이벤트 핸들러. 이벤트 처리 GUI 환경은 비절차적이며 사용자의 입력에 반응하는 이벤트를 처리하는 식으로 코드를 작성한다 . 이벤트를 작성하는 여러 가지 방법과 문법적 변형이 존재한다 .
E N D
5 입 력
학습목표 • 이벤트를 처리하는 여러 가지 형식과 각 형식의 장단점에 대해 상세하게 연구하고 기본적인 이벤트에 대한 실습을 한다. • 사용자의 입력을 자유자재로 처리하기 위해서 반드시 습득해야 하는 중요한 기술 실습. • 내용 • 이벤트 핸들러 • 여러 가지 이벤트
1. 이벤트 핸들러 • 이벤트 처리 • GUI 환경은 비절차적이며 사용자의 입력에 반응하는 이벤트를 처리하는 식으로 코드를 작성한다. • 이벤트를 작성하는 여러 가지 방법과 문법적 변형이 존재한다. • 각 방법이 혼용되므로 모든 방식에 대해 익숙해질 필요가 있다.
1. 이벤트 핸들러 • 이벤트 처리 • 콜백메서드 재정의. • 특정 이벤트가 발생했을 때 시스템에 의해 자동으로 호출되는 매서드. • 특정 이벤트가 발생한 시점을 정확하게 가로챌 수 있으며, 이벤트에 대한 상세한 정보까지 얻음. • 반드시 상속을 받아야만 한다. • 모든 이벤트에 대한 콜백이 다 정의되어 있지 않다. booleanonTouchEvent (MotionEvent event) booleanonKeyDown (intkeyCode, KeyEvent event) booleanonKeyUp (intkeyCode, KeyEvent event) booleanonTrackballEvent (MotionEvent event)
1. 이벤트 핸들러 • 이벤트 처리 • 콜백메서드 재정의첫번째 실습 예제
1. 이벤트 핸들러 • 이벤트 처리 • 리스너 인터페이스 구현. • 리스터(Listener) : 특정 이벤트를 처리하는 인터페이스. • 대응되는 이벤트를 받는 단 하나의 메서드가 선언되어 있다. • 대표적인 몇가지리스너와리스너에 선언된 메서드는 다음과 같다. View.OnTouchListener : booleanonTouch (View v, MotionEvent event) View.OnKeyListener : booleanonKey (View v, intkeyCode, KeyEvent event) View.OnClickListener : void onClick (View v) View.OnLongClickListener : booleanonLongClick (View v) View.OnFocusChangeListener : void onFocusChange (View v, booleanhasFocus) • 이벤트를 처리하려면 리스너를 구현하는 클래스를 선언, 그 객체를 생성해야 한다. • 등록 메서드는“ Set + 리스너“ • 상속을 받지 않아도 임의의 클래스가 구현 가능하다. • 별도의 리스너 클래스를 구현하고 리스너 객체를 생성해야 한다는 면에서 번거롭다.
1. 이벤트 핸들러 • 이벤트 처리 • 뷰가리스너 구현. • 뷰를 상속받을 경우 뷰도리스너를 구현 할 수 있다. • 자신의 이벤트를 스스로 처리한다는 면에서 기동성 향상. • 뷰를 상속받을 경우에만 이 기법을 쓸 수 있다.
1. 이벤트 핸들러 • 이벤트 처리 • 익명 이너 클래스 사용. • 익명 이너 클래스 문법을 활용하여 리스너 클래스 선언을 생략한다. • 리스너 생성을 위해 한번만 사용할 클래스 이므로 두 개 이상의 리스너는 만들 수 없다. • 익명 이너 클래스 정의 하는 문법은 다음과 같다.
1. 이벤트 핸들러 • 이벤트 처리 • 익명 이너 클래스의 임시 객체 사용. • 리스너 객체 두 개 이상 생성할 필요가 없다. • 이름없는 임시 객체로 생성하여 set 메서드의 인수로 전달한다. • 짧고 간단하지만 형식이 생소하다.
1. 이벤트 핸들러 • 핸들러의 우선순위. • 이벤트 핸들러가 중복 정의되었을 경우 미리 정한 우선순위에 따라 적절한 핸들러를 선택 호출 한다. • 범위가 좁은 핸들러가 먼저 호출한다. • 우선 순위의 핸들러에서true를 리턴하면 다음 순위는 호출되지 않는다.
1. 이벤트 핸들러 • 외부 변수 액세스. • 리스너는 등록하는 메서드의 지역 메서드가 아니다. • 리스너의 실행 시점은 등록 시점이 아니라 이벤트 발생시점이다. • 리스너에서 외부 객체의 멤버는 자유롭게 참조할 수 있다. • 리스너가 등록 메서드의 지역 변수를 참조하려면 final 지정자가 필요하다. • final은 지역 변수와 리스너의 존재 기간을 일치시킨다.
1. 이벤트 핸들러 • 외부 변수 액세스. (실습예제)
2. 여러 가지 이벤트 • 터치 입력. • 손가락으로 화면을 누르는 동작 처리. • 터치 이벤트는 다음 콜백메서드나리스너핸들러로 받는다. booleanonTouchEvent (MotionEvent event) booleanonTouch (View v, MotionEvent event) • event인수로 좌표와 동작이 전달된다 • getX(), getY() : 터치한 좌표 전달
2. 여러 가지 이벤트 • 터치 입력. (실습예제)
2. 여러 가지 이벤트 • 터치 입력. (예제)
2. 여러 가지 이벤트 • 키보드 입력. • 키보드로 문자 입력시의 동작 처리. • 키보드 이벤트는 다음 콜백매서드가 처리한다. 콜백: booleanonKeyDown (intkeyCode, KeyEvent event) 리스너: booleanonKey (View v, intkeyCode, KeyEvent event) • event로 키와 동작이 전달된다 • keyCode인수 : 눌러진 키 • Key Event 클래스는 키보드 이벤트에 대한 여러 가지 정보를 구하는 메서드 제공.
2. 여러 가지 이벤트 • 키보드 입력. • KeyCode상수.
2. 여러 가지 이벤트 • 키보드 입력. • getAction메서드 키보드 동작.
2. 여러 가지 이벤트 • 키보드 입력 (실습예제)
2. 여러 가지 이벤트 • 키보드 입력 (실습예제)
2. 여러 가지 이벤트 • 위젯의 이벤트 처리. • 가장 흔하게 발생하는 이벤트는 클릭. • View.OnClickListener인터페이스를 구현하고 리스너에 클릭 처리 코드 작성. - void onClick (View v) • 터치나 키보드 입력에 비해 클릭이라는 동작만 전달 되므로 별도의 인수는 없다. • 뷰가리스너를 구현한 후 핸들러 통합 가능. • 별도의 리스너 객체 생성해서 핸들러 통합 가능.
2. 여러 가지 이벤트 • 위젯의 이벤트 처리 (실습예제)
2. 여러 가지 이벤트 • 포커스 관리. • 키보드 이벤트는 포커스를 가진 뷰에게만 전달. • 포커스는 다음 키 입력을 받을 뷰가 누구인지를 가리키는 것을 말함. • 대부분의 운영체제는 포커스를 가진 뷰를 색다르게 표시. • 일반모드 : 모바일 환경의 심플한 디자인과 어울리지 않음. • 터치모드 : 터치 스크린 사용시는 임의의 위젯을 클릭할 수 있으므로 포커스 표시를 하지 않는다. • 터치 모드 전환은 시스템에 관리하며 응용 프로그램이 통제할 수 없다.
2. 여러 가지 이벤트 • 포커스 관리 (실습예제)
2. 여러 가지 이벤트 • 포커스 관리. • 위젯의nextFocus* 속성으로 포커스 순서를 조정한다.
2. 여러 가지 이벤트 • 타이머 이벤트. • 이벤트는 주로 사용자, 시스템 상황 변화에 따라 발생. • 타이머 이벤트는 시계나 타이머 또는 애니메이션이나 백그라운드 감시 작업에도 적합. • 주기적인 작업을 처리하는 방법.
2. 여러 가지 이벤트 • 타이머 이벤트. • 핸들러로 메시지를 계속 보냄으로써 타이머를 구현한다. • countDownTimer로도 역 카운트 구현 가능하다. • 카운트다운 타이머 클래스 생성자는 다음과 같다 CountDownTimer (long millisInFuture, long countDownInterval)