java - android的多点触控问题
黄舟
黄舟 2017-04-17 17:40:01
[Java讨论组]
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 android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4809)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4965)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.os.MessageQueue.nativePollOnce(Native Method)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.os.MessageQueue.next(MessageQueue.java:128)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.os.Looper.loop(Looper.java:151)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at android.app.ActivityThread.main(ActivityThread.java:5370)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at java.lang.reflect.Method.invokeNative(Native Method)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at java.lang.reflect.Method.invoke(Method.java:525)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
04-11 16:57:43.943: E/MessageQueue-JNI(7604): at dalvik.system.NativeStart.main(Native Method)

这是什么情况啊

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(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:

}

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号