简体   繁体   English

ID的多点触控问题

[英]Multi touch problems with ID

In the code below I'm testing multi touch on my device. 在下面的代码中,我正在测试设备上的多点触控。 The problem I have is with the move action. 我的问题在于移动动作。 If I touch the screen with one finger, I get the ID of the touch input in the Logcat and when I touch the screen with a second finger and starts moving that, I get the ID of both fingers, despite that the firts finger isn't moving! 如果我用一根手指触摸屏幕,则会在Logcat中获得触摸输入的ID,而当我用第二根手指触摸屏幕并开始移动该触摸时,我会得到两根手指的ID,尽管松开的手指不是不要动! I'm confused and need some help to improve my code. 我很困惑,需要一些帮助来改进我的代码。

@Override
public boolean onTouch(View v, MotionEvent event) {
    int pointerId;
    int pointerIndex;

    synchronized (gameLoop) {
        for (int i = 0; i < event.getPointerCount() && i < 2; i++) {

            num = event.getPointerCount();
            //id = event.getPointerId(i);

            // Down
            if(event.getActionIndex() == i && (event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN || event.getActionMasked() == MotionEvent.ACTION_DOWN)) {

                int j = event.getPointerCount();
                int id = event.getPointerId(i);
                String numDown = Integer.toString(j);
                String sId = Integer.toString(id);
                Log.i("Test", "Number DOWN: " + numDown + " ID: " + sId);
            }

            // Move
            if(event.getActionMasked() == MotionEvent.ACTION_MOVE) {

                int j = event.getPointerCount();
                int id = event.getPointerId(i);
                String numDown = Integer.toString(j);
                String sId = Integer.toString(id);
                Log.i("Test", "Moving: " + numDown + " ID: " + sId);
            }

            // Up
            if(event.getActionIndex() == i && (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP || event.getActionMasked() == MotionEvent.ACTION_UP)) {

                int k = event.getPointerCount();
                int kid = event.getPointerId(i);
                String numUp = Integer.toString(k);
                String ssId = Integer.toString(kid);
                Log.i("Test", "Number UP: " + numUp + " ID: " + ssId);
            }
        }
    }
    return true;
}
 case MotionEvent.ACTION_MOVE:

        int j= event.getPointerCount();

        int fingerOneDown=0;
        int fingerTwoDown=0;
        for(int i = 0; i < j; ++i)
        {
            int pointerIndex = i;
            id= event.getPointerId(pointerIndex);
            Log.d("pointer id - move",Integer.toString(id));
            if(id== 0)
            {
                fingerOneDown = 1;
                int fingerOneX = event.getX(pointerIndex);
                int fingerOneY = event.getY(pointerIndex);
                Log.e("finger touch","touch=="+fingerOneX+","+fingerOneY);

            }
            if(pointerId == 1)
            {
                fingerTwoDown = 1;
                int fingerTwoX = event.getX(pointerIndex);
                int fingerTwoY = event.getY(pointerIndex);

                Log.e("finger touch","touch=="+fingerTwoX+","+fingerTwoY);
            }
        }
        break;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM