我使用processing.js写了一个Android应用程序!我在Galaxy标签中有多点触控变焦的问题!在移动设备上没有任何问题,但在Galaxy选项卡中,每当我尝试缩放时都会收到此错误:
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 :(得分:0)
问题是您正在检查ACTION_MOVE
案例中第一个和第二个手指的X和Y值,但是当只有一个手指移动时,您可以获得ACTION_MOVE
个事件屏幕。
如果在只有一根手指向下时拨打getX(1)
,那么您将获得IllegalArgumentException
,因为只有一根手指关闭,而您正在尝试检查第二根手指的X值。
解决方案是移动这一行:
if (pointNum == 2 ) {
到ACTION_MOVE
案例块的顶部,因为你不关心在屏幕上移动一根手指来进行缩放事件。
我遇到了这个问题,因为我在onTouchEvent
来电期间遇到此异常,同时触及ScrollView
的空白部分。有关我最终用于解决该问题的解决方法,请参阅this bug。