이벤트는 화면의 어느 부분을 어떻게 클릭하거나 터치했는지에 대한 정보를 담고있다.
이 이벤트는 리스너로 전달된다. 따라서 버튼에 리스너를 등록해두면 버튼이 클릭될 때마다 리스너의 메소드가 자동으로 호출되게 된다. 이벤트의 종류는 터치 이벤트, 클릭 이벤트, 키 이벤트 등 다양하다.
클릭 이벤트를 처리하기 위해 OnClickListener라는 인터페이스를 구현하는 객체를 만든 후 버튼에 등록합니다.
그런데 버튼을 클릭하는 경우는 워낙 많아서 더 쉽게 이벤트를 처리할 수 있도록 onClick속성을 추가로 제공해줍니다.
XML레이아웃에서 onClick 속성의 값으로 메소드의 이름을 넣어주고 그 메소드를 소스코드에 추가하여 구현합니다.
터치 이벤트는 onTouchEvent 메소드를 재정의하고 키 이벤트는 onKeyDown이나 onKeyUp 메소드를 재정의합니다.
이미 만들어져 있는 뷰 객체의 터치 이벤트나 키 이벤트를 다루고 싶다면 OnTouchListener나 OnKeyListener를 설정하면 됩니다.
View.OnTouchListener : boolean onTouch (View v, MotionEvent event)
View.OnKeyListener : boolean onKey (View v, int keyCode, KeyEvent event)
터치 이벤트 처리하기
뷰 객체에 OnTouchListener를 설정하고 싶다면 setOnTouchListener 메소드를 사용합니다.
OnTouchListener 안에는 onTouch 메소드를 정의할 수 있는데 뷰가 터치되었을 때 이 메소드가 자동으로 호출됩니다.
파라미터로는 MotionEvent 객체가 전달됩니다. MotionEvent 객체에는 터치된 곳의 좌표와 함께 터치된 상태가 전달됩니다. 화면이 눌렸는지, 눌린 상태에서 움직였는지, 화면에서 손가락이 떼어졌는지를 구분할 수 있는 정보를 받을 수 있는 getAction 메소드를 이용합니다.
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();
if (action == MotionEvent.ACTION_DOWN) {
println("손가락 눌림.");
} else if (action == MotionEvent.ACTION_MOVE) {
println("손가락 움직임.");
} else if (action == MotionEvent.ACTION_UP) {
println("손가락 뗌.");
}
return true;
}
});
마지막 줄의 세미콜론, 파라미터의 범위 주의!
키 이벤트 처리
키 이벤트는 키패드의 키가 눌렸을 때 발생합니다. 또한 뒤로가기(BACK)키, 홈 키도 있습니다.
뒤로가기 키를 예로 들면 onBackPressed() 메소드를 재정의하면 됩니다.
또는 onKeyDown 메소드를 재정의하고 파라미터로 전달된 KeyEvent 객체를 참조합니다.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
Toast.makeText(this, "시스템 [BACK] 버튼이 눌렸습니다.", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
'공부 > 안드로이드' 카테고리의 다른 글
[안드로이드] 나인패치 이미지 (0) | 2021.08.11 |
---|---|
[안드로이드] 토스트, 스낵바, 알림 대화상자 (0) | 2021.08.11 |
[안드로이드] 스크롤뷰 (0) | 2021.08.10 |
[안드로이드] 버튼이 보라색에서 안 바뀔 때 해결 방법 (0) | 2021.08.10 |
[안드로이드] 드로어블 (0) | 2021.08.10 |