일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 드로어블
- 안드로이드 스튜디오
- IOS
- 텍스트뷰 자동 스크롤
- 테이블_레이아웃
- SceneDelegate
- Swift
- 안드로이드_프로그래밍
- 수명주기
- 데이터베이스
- 리니어 레이아웃
- 액션바
- 프로젝트
- 코틀린
- textview auto scroll
- 자바
- 레이아웃
- 서비스
- 상대 레이아웃
- 안드로이드
- 부스트코스
- 텍스트뷰 스크롤
- RecyclerView
- edwith
- 프로그래밍
- 제약 레이아웃
- 코드리뷰
- 뷰
- 아이폰
- 스낵바
- Today
- Total
듀다의 성장개발로그
[부스트코스] 안드로이드 프로그래밍 07 - 이벤트 본문
오늘 포스팅의 주제는 이벤트입니다.
화면 클릭, 버튼 터치 등, 앱에서 발생하는 특정한 행동을 이벤트라고 하는데요,
버튼을 클릭하는 것을 이벤트로 전달하면 이벤트를 감지하는 ‘이벤트 리스너’가 그것을 감지합니다.
예를 들면 터치 이벤트는 터치 리스너를 통해서, 키 이벤트는 키 리스너를 통해서 감지하죠.
이벤트 리스너가 어떤 메소드를 호출하게 만든다면 특정 이벤트가 발생했을 때 특정한 동작이 실행되게 만들 수 있습니다. 그러려면 다음 세가지가 필요합니다.
1. 이벤트 리스너가 있어야 하고,
2. 이벤트 리스너가 어떤 동작을 감지할지(어디서 발생하는 동작을 감지할지) 정해져 있어야 하며,
3. 이벤트가 발생하면 메소드가 호출되게 해야 합니다.
‘리스너가 있다.’라는 것은 (이 앱에서) 특정 이벤트에 대해 등록된 리스너가 존재한다는 의미로 사용된 말이며, setOn~~으로 시작되는 메소드로 이벤트 리스너를 등록합니다. 가장 먼저 예로 들었던 터치의 경우 setOnTouchListner에 리스너를 등록해야 하죠.
이 setOnTouchListner는 등록할 리스너를 인자로 필요로 합니다.
따로 선언할 필요 없이 인자로 들어갈 곳에 리스너를 선언해서 한번에 등록까지 마칠 수 있습니다.
리스너가 어떤 메소드를 호출하게 하려면
OnTouchListner에 포함된OnTouch메소드를 오버라이드하여 필요한 메소드를 추가하면 됩니다.
그럼 예제를 통해 알아볼까요?
3등분된 화면에서 첫번째, 두번째 화면에서 이벤트가 발생하면 어떤 이벤트가 발생했는지 세번째 화면에서 한 줄로 보여주는 앱을 만들어 봅시다. 첫번째 화면은 터치 여부와 좌표를, 두번째 화면은 제스처(손가락을 어떤 방향으로 움직였는지)를 감지하게 합시다. 보여주는 내용이 세번째 화면에 누적되게 해서 로그처럼 보이게 만드는 것이 목표입니다.
우선 세번째 화면에 메시지를 띄울 TextView와 제스처를 감지할 GestureDetector가 필요합니다.
첫번째 화면의 아이디는 view, 두번째 화면은 view2입니다.
새로운 뷰 객체에 view를 findViewById로 받아서 정의하고 텍스트뷰도 같은 방식 textview에 정의합니다.
첫번째 화면에는 터치 여부를 감지하는 OnTouchListener가 필요합니다.
setOnTouchListener에 OnTouchListener를 새로 선언하여 등록합니다. 그러면 OnTouchListener의 OnTouch를 오버라이드하는 코드가 자동으로 나타나는데, 여기에 필요한 코드를 추가합니다. int형 변수에 동작값 반환하는 getAction()메소드의 반환값을 넣어 선언하고, 좌표를 얻는 getX(), getY() 메소드를 각각 float형 변수에 넣어줍니다. 이렇게 하면 첫번째 화면에 대한 코드는 끝. 두번째 화면에 대한 코드를 작성합니다.
우선 gesture를 정의해줍니다. GestureDetector 메소드를 호출하고 인자로는 OnGestureDetector를 새로 선언하여 넣습니다. 그러면 각각의 제스처에 대한 메소드들이 자동으로 오버라이드되는데, 각각에 대해 필요한 메시지를 호출하게 합니다. 사진에는 onDown밖에 없지만 다른 메소드들에 대해서도 메시지를 호출하게 합니다.
그리고 첫번째 화면과 같은 방식으로 view2를 받고, 터치 리스너를 등록해줍니다. 그리고 그 터치 리스너의 OnTouch안에 gesture 변수의 onTouchEvent메소드가 들어가야 우리가 의도한대로 동작할 것입니다.
이제 세번째 화면에 대해 작성할 차례입니다. 출력된 메시지가 사라지지 않고 이전에 출력된 메시지에 이어서 출력되도록 만들어야 하는데,
println에 append를 호출하는 것으로 간단히 해결됩니다.
사실 이번 강의부터 난이도가 조금 올라간 것 같은 느낌이 들더군요. 연습을 많이 해야 할 것 같습니다.
강의에서 배운 예제로 연습하니 적어도 강의에서 다룬 내용만큼은 익숙해지는 느낌입니다.
강의 예제가 딱 연습하기 좋은 구성으로 되어있다는 것도 [부스트코스]의 장점이라고 생각합니다.
'안드로이드 > 부스트코스' 카테고리의 다른 글
[부스트코스] 안드로이드 프로그래밍 09 - 나인패치 이미지와 비트맵 버튼 (0) | 2020.02.14 |
---|---|
[부스트코스] 안드로이드 프로그래밍 08 - 토스트 (0) | 2020.02.12 |
[부스트코스] 안드로이드 프로그래밍 06 - 테이블 레이아웃과 스크롤뷰 (0) | 2020.02.12 |
[부스트코스] 안드로이드 프로그래밍 - 프로젝트 A 코드 리뷰 (0) | 2020.02.12 |
[부스트코스] 안드로이드 프로그래밍 05 - 드로어블 (0) | 2020.02.04 |