예제 #1
0
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    Log.d(
        "ScrollLayout",
        "ScrollLayout onTouchEvent action="
            + event.getAction()
            + "getCurPage() = "
            + getCurGridView()
            + ", Configure.isDragging = "
            + Configure.isDragging);

    getCurGridView().onParentTouchEvent(event);

    if (Configure.isDragging) {
      this.handleDragTouchEvent(event);
      return true;
    }

    if (mVelocityTracker == null) {
      mVelocityTracker = VelocityTracker.obtain();
    }
    mVelocityTracker.addMovement(event);

    final int action = event.getAction();
    final float x = event.getX();
    //	final float y = event.getY();

    switch (action) {
      case MotionEvent.ACTION_DOWN:
        if (!mScroller.isFinished()) {
          mScroller.abortAnimation();
        }
        mLastMotionX = x;
        break;
      case MotionEvent.ACTION_MOVE:
        int deltaX = (int) (mLastMotionX - x);
        mLastMotionX = x;
        scrollBy(deltaX, 0);
        break;
      case MotionEvent.ACTION_UP:
        final VelocityTracker velocityTracker = mVelocityTracker;
        velocityTracker.computeCurrentVelocity(1000);
        int velocityX = (int) velocityTracker.getXVelocity();

        if (velocityX > SNAP_VELOCITY && mCurScreen > 0) {
          // Fling enough to move left
          snapToScreen(mCurScreen - 1);

        } else if (velocityX < -SNAP_VELOCITY && mCurScreen < getChildCount() - 1) {
          // Fling enough to move right
          snapToScreen(mCurScreen + 1);
        } else {
          snapToDestination();
        }
        if (mVelocityTracker != null) {
          mVelocityTracker.recycle();
          mVelocityTracker = null;
        }
        mTouchState = TOUCH_STATE_REST;
        break;
      case MotionEvent.ACTION_CANCEL:
        mTouchState = TOUCH_STATE_REST;
        break;
    }
    return true;
  }