Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pointerIndex out of range Android multitouch

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.

like image 759
DRiFTy Avatar asked Aug 02 '11 22:08

DRiFTy


1 Answers

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!

like image 156
Millec8 Avatar answered Sep 22 '22 06:09

Millec8