| |||||||
Das Thema "Android Touch Input Fehler - IllegalArgumentException: pointerIndex out of range" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Registriert seit: 02.11.2011
Beiträge: 3
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
| ich hab folgendes Problem beim interpretieren der Toucheingaben die vom System weiter gegeben werden. Also wenn ich das richtig verstanden habe, dann gibt es Indizes und IDs (Pointer). Die Pointer identifizieren den tatsächlichen 'Finger' wobei die Indizies nur die Stelle in der gespeicherten Datenstruktur angeben. Ich hab jetzt ein spezielles Problem an dieser Stelle meines Programms: Code: int eventPointer = action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; int eventPointerIndex = event.findPointerIndex(eventPointer); coord = new ScreenCoord(event.getX(eventPointerIndex), event.getY(eventPointerIndex)); Code: coord = new ScreenCoord(event.getX(eventPointerIndex), event.getY(eventPointerIndex)); Größtes Problem ist allerdings, dass dieser Index mir ja von einer API Methode bereit gestellt wird, dieser also eigentlich stimmen sollte. Kann mir jemand helfen? Im Folgenden übrigens die komplette Methode und die Fehlermeldung: Mein Code: Code: public void processTouchEvent(MotionEvent event) {
Coord coord = new ScreenCoord(event.getX(), event.getY());
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
int singlePointer = event.getPointerId(0);
switch (action) {
case MotionEvent.ACTION_DOWN:
onTouchDown(touchPaths[singlePointer], coord, event);
break;
case MotionEvent.ACTION_UP:
onTouchUp(touchPaths[singlePointer], coord, event);
break;
case MotionEvent.ACTION_MOVE:
for (int i = 0; i < event.getPointerCount(); i++) {
coord = new ScreenCoord(event.getX(i), event.getY(i));
onTouchMove(touchPaths[event.getPointerId(i)], coord, event);
}
fireTouchMove(touchPaths[singlePointer], event.getPointerCount());
break;
}
// additional pointer events
if (actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_POINTER_UP) {
int eventPointer = action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int eventPointerIndex = event.findPointerIndex(eventPointer);
coord = new ScreenCoord(event.getX(eventPointerIndex), event.getY(eventPointerIndex));
Log.d("GraphDroid", "ANOTHER FINGER");
switch (actionCode) {
case MotionEvent.ACTION_POINTER_DOWN:
onTouchDown(touchPaths[eventPointer], coord, event);
break;
case MotionEvent.ACTION_POINTER_UP:
onTouchUp(touchPaths[eventPointer], coord, event);
break;
}
}
// check gestures
boolean isSinglePointer = (event.getPointerCount() == 1);
boolean isMultiPointer = (event.getPointerCount() > 1);
if (isSinglePointer) {
checkDrag(touchPaths[singlePointer], event);
} else if (isMultiPointer) {
fireMultiTouchGesture(event.getPointerCount());
checkMultiDrag(event);
checkMapTranslation(event);
checkRotation(event);
checkZoom(event);
}
} Code: 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): FATAL EXCEPTION: main 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): java.lang.IllegalArgumentException: pointerIndex out of range 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.MotionEvent.nativeGetAxisValue(Native Method) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.MotionEvent.getX(MotionEvent.java:1549) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at de.kit.graphdroid.touch.TouchInterpreter.processTouchEvent(TouchInterpreter.java:93) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at de.kit.graphdroid.draw.Whiteboard.onTouchEvent(Whiteboard.java:54) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.View.dispatchTouchEvent(View.java:4616) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1709) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1264) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.app.Activity.dispatchTouchEvent(Activity.java:2315) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1682) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.View.dispatchPointerEvent(View.java:4684) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2398) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.view.ViewRoot.handleMessage(ViewRoot.java:2060) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.os.Handler.dispatchMessage(Handler.java:99) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.os.Looper.loop(Looper.java:132) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at android.app.ActivityThread.main(ActivityThread.java:4123) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at java.lang.reflect.Method.invokeNative(Native Method) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at java.lang.reflect.Method.invoke(Method.java:491) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 10-31 15:31:51.735: ERROR/AndroidRuntime(32289): at dalvik.system.NativeStart.main(Native Method) Geändert von FreedomTears (02.11.2011 um 23:35 Uhr) |
| | |
| | #2 (permalink) |
| Android Experte Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
|
Du nutzt ACTION_POINTER_INDEX_SHIFT ohne ACTION_POINTER_INDEX_MASK (auch wenn es oberhalb keine dokumentierten Bits gibt, ist das immer eine gefährliche Sache). Ansonsten kannst du mal schauen, welche Werte evenPointer und evenPointerIndex konkret haben, bevor es kracht
__________________ Kein Support via PN/eMail. Bitte das Forum benutzen - dort haben alle etwas davon. Bei Entwicklerfragen zu abstürzenden Apps bitte immer die Ausgabe von LogCat posten. Tipp: Zum "Danke" sagen gibt es einen Button. ![]() Geändert von DieGoldeneMitte (03.11.2011 um 10:15 Uhr) |
| | |
| | #3 (permalink) |
| Neuer Benutzer Registriert seit: 02.11.2011
Beiträge: 3
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Ich muss gestehn, dass ich nicht genau weiß, was du meinst. Wie sollte das deiner Meinung nach aussehen? Btw. ich werd die Werte bald nachliefern (sobald ich wieder ans Tablet komm )
|
| | |
| | #4 (permalink) |
| Neuer Benutzer Registriert seit: 02.11.2011
Beiträge: 3
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Okay hier die Ausgabe: Code: 11-03 16:46:15.615: DEBUG/test(5997): eventPointer = 1; eventPointerIndex = 1; 11-03 16:46:15.935: DEBUG/test(5997): eventPointer = 1; eventPointerIndex = 1; 11-03 16:46:15.935: DEBUG/test(5997): eventPointer = 1; eventPointerIndex = -1; |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Hilfe: Keine Texteingabe mehr möglich! Swype und Touch-Input streiken! | Melanie | HTC Desire Forum | 1 | 11.02.2011 17:41 |
| Touch Input downloaden? | arctic | Root / Hacking / Modding für HTC Magic | 3 | 04.03.2010 00:19 |
| touch input ? ram verbrauch ? | V1P3R | Individualisierung | 0 | 08.02.2010 17:34 |
| Touch Input auf Deutsch umstellen T9?? [Gelöst] | jamos | Root / Hacking / Modding für HTC Magic | 2 | 29.12.2009 16:00 |
| touch input (htc tastatur) funzt nicht mit donut!? | canstar | Android OS Entwicklung / Customize | 10 | 19.11.2009 11:17 |