델리게이션 이벤트 모델에서 다뤘다 싶이 안드로이드의 이벤트는 델리게이션과 하이어라키 크게 두 가지로 나뉜다. 이번에는 하이어라키에 대해 알아보려 한다.
하이어라키 이벤크 모델(Hierarchy Event Model)은 액티비티가 화면에 출력되었을 때 발생하는 사용자의 키 이벤트와 화면 터치 이벤트를 처리하기 위한 모델이다.
액티비티에서 터치 이벤트와 키 이벤트를 직접 처리하고 싶다면 이벤트 발생 시 자동 호출되는 함수만 액티비티 내에 재정의하면 된다.
액티비티에 보이는 내용을 사용자가 손가락으로 조작하는 일, 화면을 상하좌우 어떤 방향으로 밀어냈는지를 알아 낼 때 터치 이벤트로 처리한다.
터치 이벤트가 발생할 때 콜백 함수를 액티비티 내에 정의하여 이벤트를 처리한다.
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
onTouchEvent 메서드가 호출되는 터치 이벤트는 3가지 타입이 있으며, 이 메서드의 매개변수로 식별해서 사용할 수 있다.
∙ ACTION_DOWN: 화면에 터치된 순간의 이벤트
∙ ACTION_UP: 터치를 떼는 순간의 이벤트
∙ ACTION_MOVE: 터치한 후 이동하는 순간의 이벤트
밑의 함수 모두 터치 이벤트가 발생한 지점의 x, y 좌푯값을 얻는 데 사용한다. getX(), getY 함수는 이벤트가 발생한 뷰 내에서의 좌푯값을 반환하며, getRawX(), getRawY() 함수는 화면에서 좌푯값을 반환한다.
∙ getX()
∙ getY()
∙ getRawX()
∙ getRawY()
▶︎ 예시
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
initX=event.getRawX();
}
return true;
}
앱에서 키 이벤트 처리는 뒤로가기가 대부분이지만 기종에 따라 메뉴, 검색, 오버뷰 버튼 등이 제공될 수 있으며 홈과 전원, 오버뷰 버튼은 일반 애플리케이션에서 이벤트로 제어할 수 없다.
예를 들어, 뒤로가기 버튼을 눌렀을 때, "정말 종료하시겠습니까?" 또는 "종료하려면 한 번 더 누르세요." 라는 메세지를 띄우는 작업은 키 이벤트를 처리해서 작성한다.
액티비티 내에서 키 이벤트를 처리하려면 키 이벤트가 발생할 때 호출되는 이벤트 함수를 액티비티 내에 정의만 하면 된다.
∙ onKeyDown: 키가 눌린 순간의 이벤트
∙ onKeyUp: 키를 떼는 순간의 이벤트
∙ onKeyLongPress: 키를 오래 누르는 순간의 이벤트
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
매개변수로 keyDown 값이 전달되어 어느 버튼을 누른 건지 식별할 수 있다.
▶︎ 예시
@Override
public boolean onKeyDown(int keycode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
}
return super.onKeyDown(ketCode, event);
}
onKeyDown() 메서드 이외에 뒤로가기 버튼 이벤트를 처리할 수 있는 메서드가 하나 더 있다. onBackPressed() 메서드를 이용해서 처리할 수도 있다. onBackPressed() 하무는 뒤로가기 버튼 제어만을 목적으로 만들어졌기 때문에 다른 키 이벤트는 처리할 수 없다.
@Override
public void onBackPressed() {
super.onBackPressed();
}
🟥 키 이벤트는 키보드에서 키를 누른 순간의 이벤트 처리라고 생각하는 경우가 있는데, 안드로이드 소프트 키보드는 키 이벤트로 처리할 수 없다.
✏️ 이게 뭐라고 정리하는데 사십분이 걸려..후..
이렇게 다 작성해야 캐나다 갈 때 짐이 하나라도 줄지..ㅎ