기술(Tech, IT)/안드로이드(Android)

[Android] 모션이벤트(MotionEvent)

Daniel803 2021. 7. 9. 15:39

public final class MotionEvent

extends InputEvent implements Parcelable

 

java.lang.Object

android.view.InputEvent

 ↳ android.view.MotionEvent

 

 움직이는 이벤트(마우스, 펜, 손가락, 트랙볼) 처리에 사용되는 객체. 모션 이벤트는 장치의 종류에 따라 절대 혹은 상대적인 움직임과 같은 데이터를 담고있다.

 

 Object used to report movement (mouse, pen, finger, trackball) events. Motion events may hold either absolute or relative movements and other data, depending on the type of device.

 

 모션 이벤트는 액션 코드(action code)와 좌표값으로 움직임을 묘사한다. 액션 코드(action code)는 포인터의 눌러졌는지 떼졌는지 등과 같은 상태의 변화를 명시하고, 좌표는 위치를 비롯한 움직임의 특성을 묘사한다. 각각의 포인터는 고유의 ID를 가지며, ID는 포인터가 눌러질 때(ACTION_DOWN 또는 ACTION_POINTER_DOWN) 부여된다. 포인터의 ID는 포인터가 떼지거나(ACTION_UP 또는 ACTION_POINTER_UP), 제스쳐가 취소(ACTION_CANCEL)되기 전까지 유효하다. 모션 이벤트(MotionEVent) 클래스는 포인터의 위치와 다른 특성을 알 수 있는 많은 메소드를 제공한다.(getX(int), getY(int), getAxisValue(int), getPointerId(int), getToolType(int) 등)

 

1. 일관성 보장(Consistency Gurantees)

 모션 이벤트는 항상 이벤트의 일관된 흐름(consistent stream)으로서 뷰(View)에 전달된다. 일관된 흐름은 장치의 종륭에 따라 달라진다. 터치 이벤트의 경우 일관성(consistency)은 포인터가 한번에 하나씩 눌러지고 떼지거나, 그룹으로 움직이다 취소되는 것을  내포한다.

 프레임워크가 뷰(View)에 모션 이벤트의 일관된 흐름(consistent stream) 전달하려고 할 때, 모든 이벤트가 항상 누락없이 보장되는 것은 아니다. 일부 이벤트가 전달되기 전에 애플리케이션(App)의 뷰(View)가 형성돼 일부 이벤트가 누락되거나 변경된 일관성이 깨진 흐름이 생성된다. 뷰(View)는 항상 ACTION_CANCEL를 처리할 수 있게 준비가 되고 변칙적인 상황을 다룰 수 있어야된다(ex. 이전 제스처에서 ACTION_UP을 받지 못했지만 새로운 ACTION_DOWN 수신). 

 

2. 많이 사용하는 터치 이벤트

  • ACTION_CANCEL
    : getActionMasked()의 상수: 현재 제스처 중지
  • ACTION_DOWN
    : getActionMasked()의 상수: 누르는 제스처 시작, 모션은 초기 눌러진 위치 포함
  • ACTION_UP
    : getActionMasked()의 상수: 누르는 제스처 종료, 모션은 제스쳐가 떼진(release)된 마지막 위치와 마지막 누르기(down) 혹은 움직임(move) 이벤트의 중간 지점 위치 포함

 

출처

- https://developer.android.com/reference/android/view/MotionEvent