멀티 터치 구현 할때
if(event.getPointerCount()==2){ //손가락 2개일때
int action = event.getAction(); //액션 값을 받아옴
int pureaction = action & MotionEvent.ACTION_MASK; //하위 8비트 액션값을 뽑음
if(pureaction == MotionEvent.ACTION_POINTER_DOWN){ //손가락 2개가 눌렸을때
touchDis=getDistance(event); //손가락 사이의 거리를 구함
}else if(pureaction == MotionEvent.ACTION_POINTER_UP){ //손가락 하나라도 땟을때
int temp = getDistance(event); //거리를 구함
if(touchDis-temp<0){ //확대 //눌럿을때 거리와 땟을 때의 거리를 빼서 음수가 나오면 확대
/* 이하 생력 */
}else{ //축소 //그외엔 축소
}
}
}
return true;
}
이런식으로 구현을 했는데 오류가 발생합니다. 어플이 강제종료가 되는데요 (2~3번 이벤트 발생시키면 무조건입니다...)
UP 상태가 잘 넘어오지 않는것 같습니다. 이유를 모르겟네요..손가락을 때면 무조건 발생하는 건줄알았는데..
else if(업상태) 이 부분을 else로 하면 강제종료 되는 현상이 10번중 1번? 발생하구요
원래 멀티 터치가 오류가 많은 부분인가요? 아니면 제 코드에 문제가 있는건가요??
밑엔 오류났을 때 로그입니다.
06-20 21:56:03.440: W/dalvikvm(17661): threadid=1: thread exiting with uncaught exception (group=0x41836e48)
06-20 21:56:03.450: E/AndroidRuntime(17661): FATAL EXCEPTION: main
06-20 21:56:03.450: E/AndroidRuntime(17661): Process: com.setemp, PID: 17661
06-20 21:56:03.450: E/AndroidRuntime(17661): java.lang.IllegalArgumentException: pointerIndex out of range
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.MotionEvent.nativeGetAxisValue(Native Method)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.MotionEvent.getX(MotionEvent.java:1979)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.support.v4.view.MotionEventCompatEclair.getX(MotionEventCompatEclair.java:32)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.support.v4.view.MotionEventCompat$EclairMotionEventVersionImpl.getX(MotionEventCompat.java:91)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.support.v4.view.MotionEventCompat.getX(MotionEventCompat.java:219)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:1966)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.View.dispatchTouchEvent(View.java:7734)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2224)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2230)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1973)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2230)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1973)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2230)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1973)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2230)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1973)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2230)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1973)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2230)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1973)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2230)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1973)
06-20 21:56:03.450: E/AndroidRuntime(17661): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2198)
06-20 21:56:03.450: E/AndroidRuntime(17661): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1643)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.app.Activity.dispatchTouchEvent(Activity.java:2502)
06-20 21:56:03.450: E/AndroidRuntime(17661): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2146)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.View.dispatchPointerEvent(View.java:7914)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4120)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3999)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3444)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3494)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3463)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3570)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3471)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3627)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3444)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3494)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3463)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3471)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3444)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5815)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5795)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5766)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5925)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.os.MessageQueue.nativePollOnce(Native Method)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.os.MessageQueue.next(MessageQueue.java:138)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.os.Looper.loop(Looper.java:123)
06-20 21:56:03.450: E/AndroidRuntime(17661): at android.app.ActivityThread.main(ActivityThread.java:5103)
06-20 21:56:03.450: E/AndroidRuntime(17661): at java.lang.reflect.Method.invokeNative(Native Method)
06-20 21:56:03.450: E/AndroidRuntime(17661): at java.lang.reflect.Method.invoke(Method.java:515)
06-20 21:56:03.450: E/AndroidRuntime(17661): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
06-20 21:56:03.450: E/AndroidRuntime(17661): at com.android.in