Пример #1
0
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    synchronized (this) {
      int action = event.getAction() & MotionEvent.ACTION_MASK;
      int pointerIndex =
          (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK)
              >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
      int pointerId = event.getPointerId(pointerIndex);
      TouchEvent touchEvent;

      switch (action) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_POINTER_DOWN:
          touchEvent = touchEventPool.newObject();
          touchEvent.type = TouchEvent.TOUCH_DOWN;
          touchEvent.pointer = pointerId;
          touchEvent.x = touchX[pointerId] = (int) (event.getX(pointerIndex) * scaleX);
          touchEvent.y = touchY[pointerId] = (int) (event.getY(pointerIndex) * scaleY);
          touchEvent.xf = touchXf[pointerId] = (float) (event.getX(pointerIndex) * scaleX);
          touchEvent.yf = touchYf[pointerId] = (float) (event.getY(pointerIndex) * scaleY);
          isTouched[pointerId] = true;
          touchEventsBuffer.add(touchEvent);
          break;
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_POINTER_UP:
        case MotionEvent.ACTION_CANCEL:
          touchEvent = touchEventPool.newObject();
          touchEvent.type = TouchEvent.TOUCH_UP;
          touchEvent.pointer = pointerId;
          touchEvent.x = touchX[pointerId] = (int) (event.getX(pointerIndex) * scaleX);
          touchEvent.y = touchY[pointerId] = (int) (event.getY(pointerIndex) * scaleY);
          touchEvent.xf = touchXf[pointerId] = (float) (event.getX(pointerIndex) * scaleX);
          touchEvent.yf = touchYf[pointerId] = (float) (event.getY(pointerIndex) * scaleY);
          isTouched[pointerId] = false;
          touchEventsBuffer.add(touchEvent);
          break;

        case MotionEvent.ACTION_MOVE:
          int pointerCount = event.getPointerCount();
          for (int i = 0; i < pointerCount; i++) {
            pointerIndex = i;
            pointerId = event.getPointerId(pointerIndex);

            touchEvent = touchEventPool.newObject();
            touchEvent.type = TouchEvent.TOUCH_DRAGGED;
            touchEvent.pointer = pointerId;
            touchEvent.x = touchX[pointerId] = (int) (event.getX(pointerIndex) * scaleX);
            touchEvent.y = touchY[pointerId] = (int) (event.getY(pointerIndex) * scaleY);
            touchEvent.xf = touchXf[pointerId] = (float) (event.getX(pointerIndex) * scaleX);
            touchEvent.yf = touchYf[pointerId] = (float) (event.getY(pointerIndex) * scaleY);
            touchEventsBuffer.add(touchEvent);
          }
          break;
      }
      return true;
    }
  }
Пример #2
0
 @Override
 public List<TouchEvent> getTouchEvents() {
   synchronized (this) {
     int len = touchEvents.size();
     for (int i = 0; i < len; i++) touchEventPool.free(touchEvents.get(i));
     touchEvents.clear();
     touchEvents.addAll(touchEventsBuffer);
     touchEventsBuffer.clear();
     return touchEvents;
   }
 }