티스토리 뷰
[Android] Multi Touch Event Example
Touch Index 는 getPointerCount() 로 읽은 터치 개수로 0부터 터치 최대값 이전까지 구분되는 값
Touch ID 는 getPointerId(index) 으로 읽은 값으로 터치 Event별로 0부터 시작하는 고유 ID값이 주어진다.
터치 index 와 id 값의 구분 방식은 아래의 멀티 터치 예시를 참고하세요.
# Multi Touch Example Code
public class MainActivity extends AppCompatActivity {
int[] id = new int[3];
int[] x = new int[3];
int[] y = new int[3];
String result;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// 3개의 포인터(터치)까지 허용
int pointer_count = event.getPointerCount();
if (pointer_count > 3)
pointer_count = 3;
// ACTION_POINTER_DOWN 과 ACTION_POINTER_UP 이벤트는 액션 값에 추가적인 정보가 인코딩 되어 있다.
// 액션 값과 MotionEvent.ACTION_POINTER_INDEX_MASK를 & 연산을 하게 되면 눌리거나 떼어진 포인터의 인덱스 값을 알 수 있다.
// public static final int ACTION_POINTER_INDEX_MASK
// Bits in the action code that represent a pointer index, used with ACTION_POINTER_DOWN and ACTION_POINTER_UP.
switch (event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
result = "Single Touch Down:";
id[0] = event.getPointerId(0);
x[0] = (int)event.getX(0);
y[0] = (int)event.getY(0);
result += "\n(" + x[0] + ", " + y[0] + ")";
break;
case MotionEvent.ACTION_POINTER_DOWN:
result = "Multi Touch Down:";
for (int i = 0; i < pointer_count; i++)
{
id[i] = event.getPointerId(i);
x[i] = (int)event.getX(i);
y[i] = (int)event.getY(i);
result += "\n(" + id[i] + ": " + x[i] + ", " + y[i] + ")";
}
// Move는 싱글, 멀티 모두 ACTION_MOVE 하나로 처리
case MotionEvent.ACTION_MOVE:
result = "Touch Move:";
for (int i = 0; i < pointer_count; i++)
{
id[i] = event.getPointerId(i);
x[i] = (int)event.getX(i);
y[i] = (int)event.getY(i);
result += "\n(" + id[i] + ": " + x[i] + ", " + y[i] + ")";
}
break;
case MotionEvent.ACTION_UP:
result = "Single Touch Up:";
id[0] = event.getPointerId(0);
x[0] = (int)event.getX(0);
y[0] = (int)event.getY(0);
result += "\n(" + x[0] + ", " + y[0] + ")";
break;
case MotionEvent.ACTION_POINTER_UP:
result = "Multi Touch Up:";
for (int i = 0; i < pointer_count; i++)
{
id[i] = event.getPointerId(i);
x[i] = (int) event.getX(i);
y[i] = (int) event.getY(i);
result += "\n(" + id[i] + ": " + x[i] + ", " + y[i] + ")";
}
break;
default:
break;
}
textView.setText(result);
return super.onTouchEvent(event);
}
}
'Computer > Android' 카테고리의 다른 글
[Android] 파일 압축, zip 파일 만들기 (0) | 2021.05.19 |
---|---|
[Android] 슬립 화면 깨우기 (0) | 2021.01.14 |
[Android] 부팅 후 앱 자동 실행 (3) | 2020.11.18 |
[Android] Market App 종류 확인하기 (0) | 2020.11.17 |
[Android] KeyEvent 강제 발생 (2) | 2020.11.07 |
댓글