마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

멀티 터치 문제입니다.

0 추천
멀티 터치 구현 할때

 

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
아개발잘하고싶다 (340 포인트) 님이 2014년 6월 20일 질문
아개발잘하고싶다님이 2014년 6월 20일 수정

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...