【发布时间】:2011-10-18 15:46:37
【问题描述】:
我有一个触摸事件异常导致我的游戏在平板电脑(或者更具体地说,蜂窝)上崩溃...我的游戏在我的手机上运行良好,我没有听说过这种情况发生在任何人身上运行 Android 3.0 或更高版本。这是相关的日志信息...
E/AndroidRuntime(26487): java.lang.IllegalArgumentException: pointerIndex out of range
E/AndroidRuntime(26487): at android.view.MotionEvent.nativeGetAxisValue(Native Method)
E/AndroidRuntime(26487): at android.view.MotionEvent.getX(MotionEvent.java:1549)
E/AndroidRuntime(26487): at kieran.android.asteroids.GameUI.onTouchEvent(GameUI.java:665)
E/AndroidRuntime(26487): at android.view.View.dispatchTouchEvent(View.java:4616)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560)
E/AndroidRuntime(26487): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1291)
... 这是调用它的代码。对我来说似乎很好,但也许蜂窝中有一个尚未修复的错误?上面日志中的第 665 行对应于 float x = event.getX(id); 行。它可能与我获取which 变量的方式有关吗?但它在手机/2.3 及更低版本上运行良好...
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
if(actionCode == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_UP) {
int which = action >> MotionEvent.ACTION_POINTER_ID_SHIFT;
int id = event.getPointerId(which);
float x = event.getX(id);
float y = event.getY(id);
任何帮助/想法都将不胜感激,因为我正努力让我的游戏也可供平板电脑用户使用。谢谢。
【问题讨论】:
-
是的,我在 HoneyComb 上也遇到了完全相同的问题,只有我的迷你钢琴。在手机上它只是表现正常。
标签: java android exception multi-touch