开发者社区> 问答> 正文

android的多点触控问题

relativeLayout.setOnTouchListener(new OnTouchListener() {
            
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                int pointerCount = event.getPointerCount(); 
                int pointerId = 0;                 
                int action = event.getAction();
                if (pointerCount>1) {
                    Toast.makeText(FlymouseTouch.this, "滑动模式", Toast.LENGTH_SHORT).show();
                    int moreaction = event.getActionMasked();
                    switch (moreaction) {
                    case MotionEvent.ACTION_POINTER_DOWN:
                        x1 = event.getX(1);
                        y1 = event.getY(1);
                        x2 = event.getX(2);
                        y2 = event.getY(2);
                        break;
                    case MotionEvent.ACTION_MOVE:
                        mx1 = event.getX(1);
                        my1 = event.getY(1);
                        mx2 = event.getX(2);
                        my2 = event.getY(2);
                        float cx1 = mx1-x1;
                        float cy1 = my1-y1;
                        float cx2 = mx2-x2;
                        float cy2 = my2-y2;
                        NetUtils.SendTouch("appkey", MotionEvent.ACTION_MOVE, cx2, cy2, 6);
                        break;
                    case MotionEvent.ACTION_POINTER_UP:
                        float supx = event.getX(2);
                        float supy = event.getY(2);
                        NetUtils.SendTouch("appkey", MotionEvent.ACTION_POINTER_2_UP, supx, supy, 6);
                        break;

                    }

这是代码 当我运行的时候第二个手指一放到屏幕上 程序就奔溃了 报错信息如下:

04-11 16:57:43.938: E/InputEventReceiver(7604): Exception dispatching input event.
04-11 16:57:43.939: E/MessageQueue-JNI(7604): Exception in MessageQueue callback: handleReceiveCallback
04-11 16:57:43.943: E/MessageQueue-JNI(7604): java.lang.IllegalArgumentException: pointerIndex out of range
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.MotionEvent.nativeGetAxisValue(Native Method)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.MotionEvent.getX(MotionEvent.java:1981)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at com.example.shoubing.FlymouseTouch$2.onTouch(FlymouseTouch.java:108)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.View.dispatchTouchEvent(View.java:7305)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2253)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1950)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2259)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1964)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2259)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1964)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2259)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1964)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2259)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1964)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1970)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1420)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.app.Activity.dispatchTouchEvent(Activity.java:2428)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1918)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.View.dispatchPointerEvent(View.java:7506)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3654)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3579)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4849)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at 

这是什么情况?

展开
收起
蛮大人123 2016-03-12 12:01:28 1958 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    onTouch()方法中的参数MontionEvent event默认只是单点触控。你的switch的条件也不对,应该这样写

    switch (event.getAction() & MotionEvent.ACTION_MASK){
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_DOWN:
        case MotionEvent.ACTION_POINTER_UP:
    }
    2019-07-17 19:00:39
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载