2012-08-02 2 views
0

processing.js를 사용하여 Android 앱을 작성했습니다! 나는 갤럭시 탭에서 멀티 터치 줌에 문제가있다! 모바일에 아무 문제가 없습니다하지만 갤럭시 탭이 오류받을 확대하려고 할 때마다 :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

아마 코드를 포맷하고 * 전체 * StackTrace를 게시하십시오. –

답변

0

ACTION_MOVE 사례에서 첫 번째 및 두 번째 손가락의 X 및 Y 값을 확인하지만 화면에서 손가락 하나만 움직이면 ACTION_MOVE 이벤트가 발생할 수 있습니다.

한 손가락만 눌렀을 때 getX(1)으로 전화를 걸면 한 손가락 만 눌려져 두 번째 손가락의 X 값을 확인하려고하기 때문에 IllegalArgumentException이 표시됩니다.

이 솔루션은이 라인을 이동하는 것입니다 다음 ACTION_MOVE 경우 블록의 상단에

if (pointNum == 2) {

, 당신은 줌 이벤트를 화면에 손가락 하나를 움직이는 신경 쓰지 것이기 때문이다.

의 빈 부분을 만지면서 onTouchEvent 호출 중에이 예외가 발생했기 때문에이 질문을 건너 뛰었습니다. 대안을 얻으려면 결국 this bug을 참조하십시오.

관련 문제