I have a touch event exception that is causing my game to crash on tablets (or more specifically, honeycomb)... My game works fine on my phone and I haven't heard of this happening to anyone that isn't running Android 3.0 or higher. Here is the relevant log info...
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)
... And here is the code that is calling it. Seems fine to me, but maybe there is a bug in honeycomb that hasn't been fixed yet? The line number 665 from the log above corresponds to the float x = event.getX(id);
line. It must have something to do with the way I am getting the which
variable maybe? But it works fine on the phones/2.3 and lower...
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);
Any help/ideas would be greatly appreciated as I am trying to make my game available to tablet users as well. Thanks.
My problem was that it was actually calling event.getX(1) when there wasn't actually two ids. So I made sure that there were two ids with event.getPointerCount() >= 2 and it now works. Maybe you'll have the same luck!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With