본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 38일차 (이벤트처리, 단말방향 전환)

[이벤트 처리 방식]

1. 손가락으로 화면을 터치하면 ‘터치 이벤트(Touch Event)’가 발생한다.

2. 실제 버튼이나 소프트 키패드를 누르면 발생하는 ‘키 이벤트(Key Event)’도 있다.

3. 터치 이벤트를 쉽게 처리할 수 있도록 ‘클릭 이벤트(Click Event)’를 제공한다.

4. 소스 코드에서 클릭 이벤트를 처리하도록 버튼의 리스너를 설정하는 이벤트 처리방식은

..화면에서 발생하는 이벤트를 버튼과 같은 위젯 객체에 전달한 후 그 이후의 처리 과정을

..버튼에 위임한다고 해서 ‘위임 모델’이라고 부른다.

★ 대표적인 이벤트 처리 메서드

boolean onTouchEvent(MotionEvent event)

boolean onKeyDown(int keyCode, KeyEvent event)

boolean onKeyUp(int keyCode, KeyEvent event)

5. 위 메서드들은 뷰를 상속하여 새로운 클래스를 정의할 때 재정의할 수 있다. 예를 들어,

...Button 클래스를 상속하여 MyButton과 같은 새로운 클래스를 만들면 이 메서드들을

...재정의할 수 있다. 만약 새로운 뷰를 정의하지 않고 기존의 뷰 객체에서 이벤트를

...처리하려면 리스너를 설정하는 메서드를 호출해야 한다.

★ 기존의 뷰 클래스를 그대로 사용하면서 그 객체에 설정하여 사용하는 메서드들

View.OnTouchListener : boolean onTouch (View v, MotionEvent event)

View.OnKeyListener : boolean onKey (View v, int keyCode, keyEvent event)

View.OnClickListener : void onClick (View v)

View.OnFocusChangeListener : void onFocusChange (View v, boolean hasFocus)

★ 유형별 이벤트 정리

속성

설명

터치 이벤트

화면을 손가락으로 누를 때 발생

키 이벤트

키패드나 하드웨어 버튼을 누를 때 발생

제스처 이벤트

터치 이벤트 중에서 스크롤과 같이 일정 패턴으로 구분되는 이벤트

포커스

뷰마다 순서대로 주어지는 포커스

화면 방향 변경

화면의 방향이 가로와 세로로 바뀜에 따라 발생하는 이벤트

 

★ 제스처를 통해 처리할 수 있는 이벤트

메서드

이벤트 유형

onDown()

화면이 눌렸을 경우

onShowPress()

화면이 눌렸다 떼어지는 경우

onSingleTapUp()

화면이 한 손가락으로 눌렸다 떼어지는 경우

onSingleTapConfirmed()

화면이 한 손가락으로 눌려지는 경우

onDoubleTap()

화면이 두 손가락으로 눌려지는 경우

onDoubleTapEvent()

화면이 두 손가락으로 눌려진 상태에서 떼거나 이동하는 등 세부적인 액션을 취하는 경우

onScroll()

화면이 눌린 채 일정한 속도와 방향으로 움직였다 떼는 경우

onFling()

화면이 눌린 채 가속도를 붙여 손가락을 움직였다 떼는 경우

onLongPress()

화면을 손가락으로 오래 누르는 경우

 

※ 터치 이벤트 처리하기 예시

 

※ 제스쳐 이벤트 처리하기 예시

.- 제스쳐 이벤트를 처리해주는 클래스는 GestureDetector이며, 이 객체를 만들고 터치 이벤트를 전달하면 GesttureDetector 객체에서 각 상황에 맞는 메서드를 호출한다.

 

[키 이벤트 처리하기]

1. 키 입력은 onKeyDown()메서드를 재정의하여 처리할 수 있다.

boolean onKeyDown (int keyCode, KeyEvent event)

boolean onKey (View v, int keyCode, KeyEvent event)

2. onKey() 메서드는 뷰의 OnKeyListenr 인터페이스를 구현할 때 사용된다.

※ 키 이벤트 처리하기

예시

 

[단말 방향을 전환했을 때 이벤트 처리하기]

1. 단말의 방향이 바뀌었을 때 세로방향의 XML 레이아웃과 가로 방향의 XML 레이아웃을 따로 만들어 둘 필요가 있다.

2. 단말의 방향이 바뀔 때 액티비티를 메모리에서 없앴따가 다시 만든다.(자동)

※ 단말 방향전환 예시 1

 

3. 단말의 방향이 바뀔 때마다 액티비티가 메모리에서 없어졌다가 새로 만들어지므로 액티비티 안에 선언해 두었던 변수 값이 사라지므로 변수의 값을 저장했다가 다시 복원하는 방법이 있어야 한다. 이런 문제를 해결할 수 있도록 onSaveInstanceState 콜백 메서드가 제공된다.

※ onSaveInstanceState 예시

.- 제대로 친 것 같은데... 작동을 안하네요..

 

4. 액티비키는 바뀌지 않고 단순히 화면에 보이는 레이아웃만 바꾸고 싶다면 액티비티를 유지할 수 있는 방법을 따로 제공한다. 매니페스트에 액티비티를 등록할 때 configChanges속성을 설정해야 한다.

※ configChanges 예시