此异常通常出现在多指触控操作中,原因是指针索引超出了有效范围。解决方法是在处理touch事件时进行判断并限定指针索引范围。以下是示例代码:
@Override public boolean onTouchEvent(MotionEvent event) { final int action = event.getActionMasked(); final int pointerIndex = event.getActionIndex();
switch (action) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN: {
if (pointerIndex >= MAX_TOUCH_POINTS) {
break;
}
// handle pointer down event
break;
}
case MotionEvent.ACTION_MOVE: {
for (int i = 0; i < event.getPointerCount(); i++) {
if (i >= MAX_TOUCH_POINTS) {
break;
}
// handle move event
}
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP: {
if (pointerIndex >= MAX_TOUCH_POINTS) {
break;
}
// handle pointer up event
break;
}
}
return true;
}
在这个示例中,MAX_TOUCH_POINTS是您希望支持的最大触摸点数。如果超过了这个数,就不会处理该事件。通过这种方式,可以避免指针索引超出有效范围的情况。