1. Gewinne jetzt ein UMiDIGI C Note - alle Informationen findest du hier!!
  1. FreedomTears, 02.11.2011 #1
    FreedomTears

    FreedomTears Threadstarter Neuer Benutzer

    Hey,

    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));
    
    Jedes mal wenn ich mehr 3 Finger auf dem Bildschirm habe und diese gleichzeitig wieder anhebe, schmiert die App ab und ich bekomme folgenden Fehler: IllegalArgumentException: pointerIndex out of range. Dieser tritt an hier auf:
    Code:
    coord = new ScreenCoord(event.getX(eventPointerIndex), event.getY(eventPointerIndex));
    
    Ich gehe davon aus, dass bei getX eben ein Index aufgerufen wird der nicht existiert. Problem ist, ich hab sowohl überprüft ob der Index kleiner der maximalen Anzahl an Pointern im Event ist (nicht im momentanen Code enthalten), als auch versucht, nur 2 Finger zu interpretieren. Das mit den zwei Fingern hat insofern auch geklappt, dass er nur 2 Finger verarbeitet, allerdings bekomm ich den selben Fehler immernoch.

    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);
    	}
    }
    
    Die Fehlermeldung:
    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)
    [LEFT][/LEFT]
     
    Zuletzt bearbeitet: 02.11.2011
  2. DieGoldeneMitte, 03.11.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    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 :D
     
    Zuletzt bearbeitet: 03.11.2011
  3. FreedomTears, 03.11.2011 #3
    FreedomTears

    FreedomTears Threadstarter Neuer Benutzer

    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. FreedomTears, 03.11.2011 #4
    FreedomTears

    FreedomTears Threadstarter Neuer Benutzer

    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;
    
    Dass das nich klappt versteh ich... aber wieso es diese Werte annimmt nicht. :(
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[NON-DEV] ADB -Nach Tutorial zur Speichererweiterung - Installation von Apps schlägt fehl Android App Entwicklung Gestern um 17:23 Uhr
Hilfe bei Fehler in Quellcode benötigt Android App Entwicklung Freitag um 23:01 Uhr
[OFFEN] Android Spiel Android App Entwicklung Freitag um 09:34 Uhr
[OFFEN] Android Studio Ram voll nach 5h arbeit Android App Entwicklung 15.06.2017
[GESCHLOSSEN] APK Zigalign Fehler Playstore Android App Entwicklung 13.06.2017
[OFFEN] Android Studio - Code Style Android App Entwicklung 08.06.2017
[OFFEN] SharedPreferences und ViewPager, unique key Android App Entwicklung 06.06.2017
[OFFEN] Android Icon Pack dynamisch erstellen Android App Entwicklung 05.06.2017
[ERLEDIGT] Android 7 nougat merkwürdiges Verhalten URL HttpURLConnection %27 Android App Entwicklung 31.05.2017
[OFFEN] Android Studio - Apk-Generierung dauert sehr lange Android App Entwicklung 26.05.2017
Du betrachtest das Thema "Android Touch Input Fehler - IllegalArgumentException: pointerIndex out of range" im Forum "Android App Entwicklung",