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
Post a Comment