Android/Processing MotionEvent getX() raises exception -


i'm new android development bear me.

i've written processing script works 2 simultaneous presses. i'm using android.view.motionevent. in main script (pde) have this:

public boolean surfacetouchevent(motionevent event) {   if (event.getactionmasked() == motionevent.action_down) {   //do action down stuff...   }   //etc other actions... 

this works fine. problem comes in handling action_move:

  //action_move   else if (event.getactionmasked() == motionevent.action_move) {     int pointercount = event.getpointercount();     print("pointercount: " + str(pointercount));     (int = 0; i<pointercount; i++) {       int pointerid = event.getpointerid(i);       print("i: " + str(i));       print("pointerid: " + str(pointerid));       movex[pointerid] = event.getx(pointerid);       movey[pointerid] = event.gety(pointerid);     }   } 

when first pointer lifts off before second exception produced:

fatal exception: main java.lang.illegalargumentexception: pointerindex out of range     @ android.view.motionevent.nativegetaxisvalue(native method)     @ android.view.motionevent.getx(motionevent.java:1974)     @ processing.test.scrapeashape.scrapeashape.surfacetouchevent(scrapeashape.java:131)     @ processing.core.papplet$sketchsurfaceview.ontouchevent(unknown source)     @ android.view.view.dispatchtouchevent(view.java:5604)     @ android.view.viewgroup.dispatchtransformedtouchevent(viewgroup.java:2060)     @ android.view.viewgroup.dispatchtouchevent(viewgroup.java:1829)     @ android.view.viewgroup.dispatchtransformedtouchevent(viewgroup.java:2060)     @ android.view.viewgroup.dispatchtouchevent(viewgroup.java:1829)     @ android.view.viewgroup.dispatchtransformedtouchevent(viewgroup.java:2060)     @ android.view.viewgroup.dispatchtouchevent(viewgroup.java:1829)     @ com.android.internal.policy.impl.phonewindow$decorview.superdispatchtouchevent(phonewindow.java:1917)     @ com.android.internal.policy.impl.phonewindow.superdispatchtouchevent(phonewindow.java:1376)     @ android.app.activity.dispatchtouchevent(activity.java:2364)     @ com.android.internal.policy.impl.phonewindow$decorview.dispatchtouchevent(phonewindow.java:1865)     @ android.view.view.dispatchpointerevent(view.java:5784)     @ android.view.viewrootimpl.deliverpointerevent(viewrootimpl.java:2894)     @ android.view.viewrootimpl.handlemessage(viewrootimpl.java:2470)     @ android.view.viewrootimpl.processinputevents(viewrootimpl.java:845)     @ android.view.viewrootimpl.handlemessage(viewrootimpl.java:2479)     @ android.os.handler.dispatchmessage(handler.java:99)     @ android.os.looper.loop(looper.java:137)     @ android.app.activitythread.main(activitythread.java:4448)     @ java.lang.reflect.method.invokenative(native method)     @ java.lang.reflect.method.invoke(method.java:511)     @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:823)     @ com.android.internal.os.zygoteinit.main(zygoteinit.java:590)     @ dalvik.system.nativestart.main(native method) 

the output before exception is:

pointercount: 1 i: 0 pointerid: 1 

so there 1 pointer who's pointer id 1. getx() raising exception can't understand why, since i'm using pointerid given event.getpointerid().

any ideas?

i figured out.

getx() takes index in event list. not pointerid. misinterpreted documentation says "use getpointerid(int) find pointer identifier index"; don't use getpointerid generate parameter getx() use findpointerindex() if don't have index.

correction code above be...

  movex[pointerid] = event.getx(i);   movey[pointerid] = event.gety(i); 

...because array implicitly indexed pointer id. hacky know. code has moved on since then.


Comments