이 책의 코드는 Programming Android, 2nd Edition입니다. 처음에는 두 손가락으로 화면을 터치합니다. 그러면 한 손가락으로 터치 스크린 - java.lang.IllegalArgumentException가 : pointerIndex 범위Android 멀티 터치 포인터 인덱스 범위 외
public boolean onTouch(View v, MotionEvent event) {
int action = event.getActionMasked();
int idx;
int n;
switch (action) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
idx = MotionEventCompat.getActionIndex(event);
tracks.add(event.getPointerId(idx));
break;
case MotionEvent.ACTION_POINTER_UP:
idx = MotionEventCompat.getActionIndex(event);
tracks.remove(event.getPointerId(idx));
break;
case MotionEvent.ACTION_MOVE:
n = event.getHistorySize();
for (Integer i : tracks) {
idx = event.findPointerIndex(i.intValue());
for (int j = 0; j < n; j++) {
addDot(
dots,
event.getHistoricalX(idx, j),
event.getHistoricalY(idx, j),
event.getHistoricalPressure(idx, j),
event.getHistoricalSize(idx, j)
);
}
}
break;
default:
return false;
}
for (Integer i: tracks){
idx = event.findPointerIndex(i.intValue());
addDot(
dots,
event.getX(idx),
event.getY(idx),
event.getPressure(idx),
event.getSize(idx)
);
}
return true;
}