일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ㅇㅇㅇㄴㅇ
- ㅂ
- 스프링시큐리티
- Spring Security
- 스프링 #스프링 시큐리티 #spring security
- securityconfig
- HttpSecurity
- WebSecurity
- WebConfigurerAdapter
- Session1이 그 모든 클라이언트의 저올
- Today
- Total
다오의 개발일지
이벤트 처리 본문
이벤트 핸들러
- 사용자의 터치 반응이나 시스템 구성요소에서 발생되는 이벤트를 처리하는 주체
- 이벤트의 발생을 탐지, 그에 대응하는 기능을 실행시킨다.
View를 통한 콜백 메서드의 구현
콜백 메서드
- 특정 이벤트가 발생하면 시스템에서 '자동으로 호출'되는 메서드
- 이벤트가 발생하면 자동으로 호출되어 실행되는 콜백 메서드를 재정의한다.
- View에서 구현되며 View 클래스 내부에 존재하는 추상 메서드가 재정되어 활용됨
- 콜백 메서드는 하나의 이벤트에 대한 정보만을 가진다. (이벤트리스너는 여러 대상을 등록)
OnTouchEvent | 화면 터치 시 true/false |
onKeyDown | 키를 누른 상태에서 뗄 때 true/false |
onKeyUp | 키를 눌렀을 때 true/false |
onTrackballEvent | 트랙볼이 사용될 때 true/false |
onFocusChanged | View가 포커스를 얻거나 잃을 때 true/false |
여기서 파라미터에는 MotionEvent 객체인 event가 들어온다.
여기에는 사용자의 터치 이벤트가 들어있다. (펜, 손가락, 좌표 등)
event.getAction() 으로 가져올 수 있다.
MotionEvent 객체의 getAction 메서드는 사용자의 행동에 대한 정보를 전달받는 기능을 수행한다.
if(event.getAction() == MotionEvent.ACTION_DOWN) ~
- 특정 터치 이벤트만 지정되어있기때문에 처리할 수 있는 이벤트가 제한적임
이벤트 리스너 인터페이스의 구현
- View 내에 있는 특정 이벤트를 처리하는 인터페이스
- 특정 이벤트가 발생하는 시점까지 대기하고 있다가 발생된 이벤트에 맞는 콜백 메서드를 수행한다.
- 이벤트가 제한적이지 않으므로 범용적이며, View를 상속받을 필요도 없다.
View.OnTouchListener | View를 터치 할 때 호출 |
View.OnKeyListener | 키를 누르거나 뗄 때 |
View.OnClickListener | View를 클릭할 때 |
View.OnLongClickListener | View를 길게 클릭할 때 |
View.OnFocusChangeListener | 포커스가 한 View에서 다른 View로 바뀔 때 |
View.OnDragListener | View를 드래그 할 때 |
- 이벤트를 처리할 수 있는 인터페이스를 구현하려면 "별도의 클래스를 선언 후 그에 대한 객체를 만들어 놓아야 함"
- 배보다 배꼽이 커진느낌, 리소스 및 코드가 많이 들어가는 문제
액티비티를 통한 이벤트 리스너의 구현
- 액티비티는 Activity 클래스를 이미 상속받지만 인터페이스는 개수에 상관없이 구현할 수 있다.
- 액티비티로 리스너 인터페이스를 구현하는 것이 가능하다.
//터치리스너 예제
public class MainActivity extends Activity implements View.OnTouchListener
{
public void onCreate(){
v.setOnTouchListener(this) //< 여기서 this 는 이 클래스, 리스너를 구현했기에 이 자체가 리스너다
...
}
public boolean onTouch(View v, MotionEvent event) {
...
}
}
- 하지만 액티비티를 통해 View에 대한 이벤트를 처리하기 위한 메서드를 제공하기에 View는 액티비티에 종속적이다.
- View를 다른 액티비티에 재사용 하려면 이벤트 리스너를 다른 액티비티에 또 구현해야 한다.
View를 통한 이벤트 리스너의 구현
- View 클래스를 선언하는 부분에서 필요한 이벤트리스너 인터페이스를 상속받아 구현한다.,
- 이렇게 하면 액티비티에 종속적이지 않아 재사용 면에서 유리하다
//onCreate 메서드 중
MyView vw = new MyView(this)
vw.setOnTouchListener(vw)
//터치리스너를 구현하는 MyView 클래스 정의
class MyView extends View implements View.OnTouchListener {
public MyView(Context context){ //Activity가 들어감
...
}
public boolean onTouch(View v, MotionEvent event){
...
}
}
구별할 점
View를 통한 콜백 메서드 구현에서는 onTouchEvent() 콜백 메서드를 이용하고
View를 통한 이벤트 리스너는 onTouch() 메서드를 이용한다.
이벤트 핸들러 우선순위
- 내부에 중첩된 안쪽 범위일 수록 우선순위가 높다.
일반적으로
1. View의 인터페이스 리스너
2. View의 콜백 메서드
3. 액티비티의 콜백 메서드
- 중첩된 경우, 메서드의 return값을 true로 반환하면 다음 메서드는 호출되지 않는다.
- return을 주석처리 하면 return false로 진행되면서 다음 메서드를 이어서 호출시킨다.
다만 이전 메서드들이 빠르게 실행되기 때문에, 메시지를 출력하거나 하는 것을 중첩으로 사용하기엔 부적절하다.
터치입력
- onTouchEvent(콜백), onTouch(이벤트리스너
- 사용자가 화면을 터치하면서 발생하는 사용자 이벤트
- 사용자와의 직접적인 상호작용과 JAVA 프로그램의 동적인 기능 수행을 통해 처리도김
키보드입력
- onKeyDown : 키보드 입력 이벤트 발생 시 호출
- getKeyCode : 클릭된 키코드를 전달함
- KEYCODE_DPAD_XXX : 이동 키 관련 keyCode
- KEYCODE_A ~ Z, 0~9, ... : 문자관련 keyCode
통화, 홈, 뒤로, 볼륨 증가 감소 등
invalidate : 화면을 갱신 시킨 후, onDraw메서드 자동호출
위젯 이벤트
타이머 이벤트
- 다른 이벤트와 달리 타이머는 프로그램 코드를 통해 이벤트가 실행되며, 매개 변수로 지정한 값에 따라 이벤트 발생 간격과 횟수가 결정됨
Handler
- 액티비티에서 쓰레드에게 메시지를 보내는 클래스
- 쓰레드 간 메시지 통신을 위한 통로
- sendEmptyMessage(sendEmptyMessage)로 특정 핸들러에게 보낼 수 있음
- 안드로이드 플랫폼은 메인 쓰레드가 아닌 서브 쓰레드에서는 직접 사용자 인터페이스 작업을 처리할 수 없다.
그러므로 Handler를 사용해 메시지를 보내 사용자 인터페이스 작업을 처리한다.
Handler 인터페이스를 사용해 구현하는데, 생성 후 바로 handleMessage 메서드를 구현해서 사용할 수 있다.
handler.sendEmptyMessageDelayed(0, 1000) : 1초 후 다시 전송
방향 이벤트
SensorManager 클래스
- 센서에 접근하게 해 줄 수 있는 메서드들을 제공
Sensor
- SensorManager 클래스의 메서드를 활용해 접근하고자 하는 센서의 객체를 선언
SensorEventListener 인터페이스
- 센서값이 변경되면 SensorManager를 통해 이벤트 형태로 변경된 센서값을 전달받을 수 있게 함
SensorEvent 클래스
- 센서에 대한 정보를 담고 있고 객체를 통해 센서값들을 획득할 수 있음
'모바일 > 안드로이드' 카테고리의 다른 글
대화 상자 (0) | 2025.03.04 |
---|---|
어댑터 뷰 (0) | 2025.03.04 |
도형 및 소리 출력 (0) | 2025.02.27 |
레이아웃 (0) | 2025.02.27 |
사용자 인터페이스를 위한 위젯 (0) | 2025.02.26 |