Android onTouchEvent()未检测到连续触摸

时间:2014-05-31 15:27:25

标签: java android touch ontouchlistener

我试图在以相机为中心的玩家游戏中实现操纵杆。 操纵杆是否增加" dx"或" dy"。 我创建了一个GameControls类来处理GameSurfaceView的所有触摸。 当我触摸屏幕并移动手指时,一切正常,但当我停止时,onTouch事件将停止被触发。

public void handleMultitouch(MotionEvent event)
{
    int ptrId=-1;
    int action = event.getAction();

    switch (action & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN:
        point.x=(int) event.getX();
        point.y=(int) event.getY();
        if(joystickEntidade.colide(point))
        {
            c++;
            Log.e("down",event.getPointerId(0) +"");
            idJoystick=action;
            JSdown(point.x,point.y);
        }
        break;

    case MotionEvent.ACTION_UP:
        point.x=(int) event.getX();
        point.y=(int) event.getY();
        if(event.point(0)==point)
        {
            c=0;
        JSup(event);
        idJoystick=-1;
        }
        else
            Sup(point.x,point.y);
        break;  

    case MotionEvent.ACTION_POINTER_DOWN:
        ptrId = action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;


        int ptrIdx = event.findPointerIndex(ptrId);

        point.x=(int) event.getX(ptrIdx);
        point.y=(int) event.getY(ptrIdx);
        if (joystickEntidade.colide(point))
        {
            idJoystick=ptrId;
            JSdown(point.x,point.y);
        }
          else
                Sup( point.x,point.y);

    break;

    case MotionEvent.ACTION_POINTER_UP:
        ptrId = action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
        /*if (joystickEntidade.colide(pontoEntidade))
            JSup(event);
        else*/
        pontoEntidade.x=(int) event.getX(ptrId);
        pontoEntidade.y=(int) event.getY(ptrId);
        if(idJoystick==ptrId)
        {
            JSdown(pontoEntidade.x,pontoEntidade.y);
        }
        /* Log.e("APU", (int)event.getX(ptrId)+"-"+(int)event.getY(ptrId));*/
    break;


    case MotionEvent.ACTION_MOVE:
        point.x=(int) event.getX();
        point.y=(int) event.getY();
         for(int i = 0; i < event.getPointerCount(); ++i)
        if(event.getPointerId(i)==idJoystick)
        {
            c--;
        JSdown(point.x,point.y);
        }
        break;
    default:
        break;
    }

即使我没有移动手指,有没有办法继续跟踪手指位置?

1 个答案:

答案 0 :(得分:1)

记住最后的位置。仅当手指位置发生变化时才会调用onTouchListener,而不是经常调用。所以,如果它仍然没有,将不会打电话。如果它没有触及,则不会打电话。这就是Android的工作方式,你需要以这种方式工作。