Android多点触控指针索引超出范围
本书中的代码:。 起初我用两个手指触摸屏幕——一切正常。 然后用一根手指触摸屏幕-java.lang.IllegalArgumentException:pointerIndex超出范围Android多点触控指针索引超出范围,android,multi-touch,Android,Multi Touch,本书中的代码:。 起初我用两个手指触摸屏幕——一切正常。 然后用一根手指触摸屏幕-java.lang.IllegalArgumentException:pointerIndex超出范围 public boolean onTouch(View v, MotionEvent event) { int action = event.getActionMasked(); int idx; int n; switch (action) { case Moti
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;
}
public boolean onTouch(视图v,运动事件){
int action=event.getActionMasked();
int-idx;
int n;
开关(动作){
case MotionEvent.ACTION\u DOWN:
case MotionEvent.ACTION\u指针\u向下:
idx=MotionEventCompat.getActionIndex(事件);
tracks.add(event.getPointerId(idx));
打破
case MotionEvent.ACTION\u指针\u向上:
idx=MotionEventCompat.getActionIndex(事件);
tracks.remove(event.getPointerId(idx));
打破
case MotionEvent.ACTION\u移动:
n=event.getHistorySize();
对于(整数i:轨迹){
idx=event.findPointerIndex(i.intValue());
对于(int j=0;j
方法findPointerIndex()可能返回-1。根据我的经验,当你用两个手指(或更多)触摸并放开第一个被按下的手指时,就会发生这种情况。
我认为这是“pointerIndex超出范围”错误的原因-因为-1不是有效的索引:-)
对于动作,我建议使用一个带有getPointerCount()的循环,即从0循环到getPointerCount()-1。
使用此方法,您可以使用getX(手指)和getY(手指)获得触摸位置。
其中“finger”是循环计数。
使用此方法将无法跟踪您的手指的ID,即如果您用两个手指按压并松开第一个手指(ID=0),则第二个手指将继续作为第一个手指(现在未按压)
希望这有帮助!
/理查德