示例#1
0
  // Touch events
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    /* Ref: http://developer.android.com/training/gestures/multi.html */
    final int touchDevId = event.getDeviceId();
    final int pointerCount = event.getPointerCount();
    int action = event.getActionMasked();
    int pointerFingerId;
    int mouseButton;
    int i = -1;
    float x, y, p;

    // !!! FIXME: dump this SDK check after 2.0.4 ships and require API14.
    if (event.getSource() == InputDevice.SOURCE_MOUSE && SDLActivity.mSeparateMouseAndTouch) {
      if (Build.VERSION.SDK_INT < 14) {
        mouseButton = 1; // For Android==12 all mouse buttons are the left button
      } else {
        try {
          mouseButton = (Integer) event.getClass().getMethod("getButtonState").invoke(event);
        } catch (Exception e) {
          mouseButton = 1; // oh well.
        }
      }
      SDLActivity.onNativeMouse(mouseButton, action, event.getX(0), event.getY(0));
    } else {
      switch (action) {
        case MotionEvent.ACTION_MOVE:
          for (i = 0; i < pointerCount; i++) {
            pointerFingerId = event.getPointerId(i);
            x = event.getX(i) / mWidth;
            y = event.getY(i) / mHeight;
            p = event.getPressure(i);
            SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
          }
          break;

        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_DOWN:
          // Primary pointer up/down, the index is always zero
          i = 0;
        case MotionEvent.ACTION_POINTER_UP:
        case MotionEvent.ACTION_POINTER_DOWN:
          // Non primary pointer up/down
          if (i == -1) {
            i = event.getActionIndex();
          }

          pointerFingerId = event.getPointerId(i);
          x = event.getX(i) / mWidth;
          y = event.getY(i) / mHeight;
          p = event.getPressure(i);
          SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p);
          break;

        case MotionEvent.ACTION_CANCEL:
          for (i = 0; i < pointerCount; i++) {
            pointerFingerId = event.getPointerId(i);
            x = event.getX(i) / mWidth;
            y = event.getY(i) / mHeight;
            p = event.getPressure(i);
            SDLActivity.onNativeTouch(touchDevId, pointerFingerId, MotionEvent.ACTION_UP, x, y, p);
          }
          break;

        default:
          break;
      }
    }

    return true;
  }