만족

[Android Studio] Event Listener의 이해 본문

[Android Studio] Event Listener의 이해

FrontEnd/Android Satisfaction 2017. 6. 30. 03:49

우리가 컴퓨터에서 JAVA를 이용하여 GUI를 개발할 때, 어떤 요소가 눌리거나 (ex 버튼) 키보드가 눌릴 때

해당 동작을 인식하여, 특정 동작을 하게 만들 수 있었다.


안드로이드에서도 마찬가지로 특정 동작을 인식할 수 있는데,

안드로이드에서는 키보드나 마우스를 사용하지 않고, 터치패널이나 버튼을 이용하여 장치에 입력신호를 보내게 된다.


PC에서와 달리 안드로이드는, MouseListener와 KeyboardListener대신, TouchListener와 KeyListener를 이용한다.


EventListener in Android Studio


<<<<Interface>>>>

OnTouchListener //특정 뷰가 터치되는 동작을 인식

OnKeyLIstener //특정 물리키가 눌리는 동작을 인식(ex 볼륨 업)

OnClickListener //특정 뷰가 클릭되는 동작을 인식(OnTouchListener와 유사)

OnFoucusChangeListener //특정 뷰의 포커스 상태가 바뀌는 것을 인식


*OnTouchListener와 OnClickListener가 인식하는 동작은 같지만, TouchListener의 적용 범위가 더 넓기 때문에 유용함.


GestureEvent


단순히 어떤 뷰를 클릭하는 것을 넘어서, 손가락 두개를 이용하여 터치하거나, 위에서 아래로 스크롤 하는 등

특정 동작을 GestureDetector객체를 이용하여 인식할 수도 있다.


GestureDetector g=new GestureDetector( Context c, OnGestureListener lis); 

와 같이 사용한다.


Context는 해당 액티비티의 컨택스트를 전달하면 되고, OnGestureListener는 GestureDetector.OnGestureListener와 같이 

GestureDetector클래스에 interface로 정의되어 있는 것을 사용한다.


예시)

//If you want to set more method, use "GestureDetector.SimpleOnGestureListener" instead "GestureDetector.OnGestureListener".
gestureDetector=new GestureDetector(this, new GestureDetector.OnGestureListener() {
//Fling is doing swiftly scrolling.
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
textView.append("\nonFling Event called");
return true;
}

//Down Event is called when person's hand put touchPanel.
@Override
public boolean onDown(MotionEvent motionEvent) {
textView.append("\nonDown Event called");
return true;
}
//showPress is called when person's hand put off touchPanel.
//showPress is similar to Click.
@Override
public void onShowPress(MotionEvent motionEvent) {
textView.append("\nonShowPress Event called");
}
//singleTapUp is called when person is clicking as using one finger.
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
textView.append("\nonSingleTapUp Event called");
return true;
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
textView.append("\nonScroll Event called");
return true;
}

@Override
public void onLongPress(MotionEvent motionEvent) {

}
});

더 많은 제스처를 인식하여 어떤 동작을 하게 하고 싶다면, GestureDetector의 두번째 파라미터에 SimpleOnGestureListener를 사용한다.


Fling은 빠르게 가속도를 주어 스크롤링 하는 것을 뜻한다.

Down은 사용자가 패널을 누르는 것을 뜻한다.

ShowPress는 사용자가 패널에서 손을 떼는 것을 뜻한다.(Down 다음에 손을 떼는 동작)

onSingleTapUp은 사용자가 두 손가락을 이용해서 패널을 누르는 것을 뜻한다.


//나머지는 직관적으로 메소드 이름에서 뜻을 알 수 있으니 생략한다.


KeyEvent


Activity클래스로부터 상속받은 onKeyDown 메소드를 오버라이드하여 사용한다.


public boolean onKeyDown(int keyCode, KeyEvent event)

//KeyCode는 눌린 키의 코드번호


예시)


public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK){
if(textView!=null){
textView.append("\nBack key is pressed");
}
}else if(keyCode==KeyEvent.KEYCODE_VOLUME_UP){
if(textView!=null){
textView.append("\nVolume up key is pressed");
}
}else if(keyCode==KeyEvent.KEYCODE_HOME){
if(textView!=null){
textView.append("\nHome key is pressed");
}
}
return super.onKeyDown(keyCode, event);
}




Comments