2012-08-02 129 views
0

我寫了一個使用processing.js的android應用程序!我在使用多點觸控縮放星系標籤時遇到問題!在手機沒有任何問題,但Galaxy Tab的,每當我試圖縮小收到此錯誤:android:pointerIndex超出範圍

FATAL EXCEPTION: main 
java.lang.IllegalArgumentException: pointerIndex out of range 
    at android.view.MotionEvent.nativeGetAxisValue(Native Method) 
    at android.view.MotionEvent.getX(MotionEvent.java:1549) 
    at changethispackage.beforesubmitting.tothemarket.u2.u2.surfaceTouchEvent(u2.java:633) 
    at apwidgets.MyScrollView.onTouchEvent(MyScrollView.java:20) 
    at android.view.View.dispatchTouchEvent(View.java:4626) 
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1554) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1320) 
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1560) 
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1333) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1862) 
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1286) 
    at android.app.Activity.dispatchTouchEvent(Activity.java:2315) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1835) 
    at android.view.View.dispatchPointerEvent(View.java:4694) 
    at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2419) 
    at android.view.ViewRoot.handleMessage(ViewRoot.java:2080) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:132) 
    at android.app.ActivityThread.main(ActivityThread.java:4126) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:491) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
    at dalvik.system.NativeStart.main(Native Method) 
Can't parse this exception line: 
FATAL EXCEPTION: main 

這裏是代碼變焦:

boolean surfaceTouchEvent(MotionEvent event) { 
    pointNum=event.getPointerCount(); 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
    case MotionEvent.ACTION_POINTER_DOWN: 
    // User is pressing down another finger. 
    float x11 = event.getX(0) - event.getX(1); 
    float y22 = event.getY(0) - event.getY(1); 
    z4 = sqrt(x11*x11+y22*y22); 
    break; 
    case MotionEvent.ACTION_POINTER_UP: 
    // User is released one of the fingers. 
    break; 
    case MotionEvent.ACTION_MOVE: 
    x1=event.getX(0); 
    x2=event.getX(1); 
    y1=event.getY(0); 
    y2=event.getY(1); 
    float x = event.getX(0) - event.getX(1); 
    float y= event.getY(0) - event.getY(1); 
    float z3 = sqrt(x*x+y*y); 
    println("z3:" + z3); 
    if (pointNum == 2) { 
     if (z3 < z4) { 
     zoom = z3/z4; 
     } 
     else { 
     zoom = z3/z4; 

     } 
     zoom = constrain(zoom, 0, 100); 
    } 

    break; 
    } 
    return super.surfaceTouchEvent(event); 
} 

請幫助,如果你知道的問題!

+0

大概設置你的代碼的格式併發布* full * StackTrace。 – 2012-08-02 12:41:39

回答

0

問題是,您正在檢查ACTION_MOVE情況下第一個和第二個手指的X和Y值,但在屏幕上只移動一個手指時,您可以獲得ACTION_MOVE事件。

如果您在只有一個手指處於關閉狀態時致電getX(1),那麼您將得到IllegalArgumentException,因爲只有一個手指處於關閉狀態,而您正在嘗試檢查第二個手指的X值。

的解決方案是推動這一行:

if (pointNum == 2) {

ACTION_MOVE情況下塊的頂部,因爲你不會在意在屏幕上移動一個手指縮放事件。

我碰到這個問題,因爲我在onTouchEvent調用中遇到這個異常,同時觸摸ScrollView的空白部分。請參閱this bug以瞭解最終最終用於解決該問題的解決方法。