안녕하세요 꼬로미입니당당
안드로이드 이벤트 처리에 대해서 포스팅합니다
이벤트 처리
그래픽 사용자 인터페이스(GUI)에서 사용자의 입력을 받을 때 사용되는 이벤트 구동 방식
* 폴링(Polling) 방식 : 사용자의 입력을 기다리는 방식, CPU 파워 낭비
* 이벤트 구동(event-driven) 방식 : 입력 발생시 이벤트를 발생시키고 처리되는 방식
뷰 클래스 이벤트 처리 메소드 재정의
뷰 클래스의 이벤트 처리 메소드 재정의, 잘 쓰지 않는 방법
커스텀뷰를 작성하는 경우(게임) 등에 사용
* View 클래스를 상속받아야 한다는 문제점
View 클래스의 이벤트 처리 메소드
구 분 | 설 명 |
onKeyDown(int, KeyEvent) | 사용자가 키보드를 눌렀을 때 호출 |
onKeyUp(int, KeyEvent) | 사용자가 키에서 손을 뗐을 때 호출 |
onTrackballEvent(MotionEvent) | 사용자가 트랙볼을 움직였을 때 호출 |
onTouchEvent(MotionEvent) | 사용자가 화면을 터치했을 떄 호출 |
onFocusChanged(boolean, int, Rect) | 뷰가 키보드 포커스를 얻거나 잃었을 경우 호출 |
*on이 붙은 것으로 보아 콜백메소드 임을 알 수 있음
*이클립스의 콜백 메소드 재정의 편리 기능
[Source] -> [Override/Implements Methods...]
이클립스의 이런 기능은 역시 활용해주는게 제맛이죠~ㅎ
이벤트 처리 객체를 생성해 이벤트 처리
이벤트 처리 객체를 별도 생성해 위젯에 등록하는 가장 일반적인 방법
이벤트 객체는 이벤트를 처리하는 콜백 메소드를 가지고 있어야 함
이벤트 리스너(evnet listener) : 뷰 클래스 내부에 정의, 콜백 메소드들이 정의된 인터페이스
View 클래스 리스너 종류
리스너안에는 하나의 메소드만 정의
리스너 객체 생성 방법
리스너 클래스를 내부 클래스로 정의
자신이 속해있는 클래스의 멤버들에게 자유롭게 접근하여 사용할 수 있는 장점
MyListenerClass implements OnClickListener
//인터페이스를 가지는 내부 클래스를 정의
MyListenerClass buttonListener = new MyListenerClass();
button.setOnClickListener(buttonListener);
//버튼에서 발생하는 클릭 이벤트를 처리할 객체를 생성
//setOnClickListener()를 이용해 객체를 버튼의 클릭 리스너로 등록
리스너 클래스를 무명 클래스(anonymous class)로 정의
가장 많이 사용되는 방법으로 클래스 정의와 동시에 객체를 생성,
이름이 없기에 한번만 사용이 가능
* 무명클래스 : 몸체는 정의되지만 이름이 없는 클래스
리스너 인터페이스를 액티비티 클래스에 구현
액티비티 클래스에 인터페이스를 구현하면 이벤트 처리할 클래스를 새로 작성하지 않아도 됨
무명클래스와 유명클래스의 차이
XML을 이용한 이벤트 처리
android:onClick="myClickListner"
XML에 onClick시 호출할 메소드를 적어주고 자바파일 액티비티 클래스 안에 정의된 이벤트 처리 메소드를 호출
Form(폼)
사용자로부터 입력받는 폼(form), 다양한 위젯들이 존재
에디트 텍스트 : 사용자로부터 텍스트를 입력받는 위젯
체크박스 : 두가지 상태를 가지는 특수한 버튼 (체크, 노체크), TextView의 자식 클래스
라디오버튼 : 체크박스와 비슷하지만 그룹 안에서 하나의 버튼만 선택가능, 선택시 그룹내 다른 버튼은 자동으로 해제
TextView의 하위 클래스, isChecked() 메소드 이용
토글버튼 : 두가지 상태 중 하나로 토글 되도록 만들어진 버튼, ON/OFF
레이팅바 : 별모양을 이용해 점수를 주는 경우에 사용되는 위젯
커스텀 버튼 : 버튼위에 텍스트 대신 이미지가 그려져 있는 버튼
키 이벤트
키 이벤트를 받을 때 OnkeyListener 리스너 구현 (리스너 내 onKey() 메소드 정의)
현재 포커스를 가지고 있는 뷰로만 전달
액티비티 안에서 키 이벤트를 받을 때 콜백메소드 onKeyDown(), onKeyUp()를 재정의
포커스
어떤 위젯이 키패드의 입력을 받는가를 나타내는 포커스, 안드로이드 실행시 자동으로 터치모드
특정 위젯이 포커스를 차지하려면 requestFocus() 호출
터치 이벤트
일반적으로 커스텀 뷰를 정의하고 onTouchEvent()를 재정의
터치이벤트 처리방식 2가지
콜백 메소드 재정의 : Boolean onTouchEvent(MotionEvent e)를 재정의
리스너 객체 등록 : 인터페이스 onTouchEventListener 안에 BooleanonTouch(View v, MotionEvent e) 정의
액션 코드(action code)
터치가 올라가는지 내려오는지 나타냄
* 터치시 안드로이드는 뷰로 액션코드와 좌표를 전달
읽어주셔서 감사드립니다
도움이 되셨다면 덧글을 부탁드립니다헤헤
'Study > Programming' 카테고리의 다른 글
안드로이드 대화상자(Dialog) 종류 특징 (0) | 2014.04.23 |
---|---|
안드로이드 메뉴 종류와 특징들 (0) | 2014.04.22 |
안드로이드 레이아웃(layout)! (0) | 2014.04.20 |
안드로이드 뷰그룹(ViewGroup), 뷰(View) (0) | 2014.04.19 |
안드로이드 XML 사용하기! (0) | 2014.04.12 |