Ejemplo n.º 1
0
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    if (mScrollDisabled) return true;

    View v = mChildViews.get(mCurrent);
    if (v != null) {
      Rect bounds = getScrollBounds(v);
      switch (directionOfTravel(velocityX, velocityY)) {
        case MOVING_LEFT:
          if (bounds.left >= 0) {
            // Fling off to the left bring next view onto screen
            View vl = mChildViews.get(mCurrent + 1);

            if (vl != null) {
              slideViewOntoScreen(vl);
              return true;
            }
          }
          break;
        case MOVING_RIGHT:
          if (bounds.right <= 0) {
            // Fling off to the right bring previous view onto screen
            View vr = mChildViews.get(mCurrent - 1);

            if (vr != null) {
              slideViewOntoScreen(vr);
              return true;
            }
          }
          break;
      }
      mScrollerLastX = mScrollerLastY = 0;
      // If the page has been dragged out of bounds then we want to spring back
      // nicely. fling jumps back into bounds instantly, so we don't want to use
      // fling in that case. On the other hand, we don't want to forgo a fling
      // just because of a slightly off-angle drag taking us out of bounds other
      // than in the direction of the drag, so we test for out of bounds only
      // in the direction of travel.
      //
      // Also don't fling if out of bounds in any direction by more than fling
      // margin
      Rect expandedBounds = new Rect(bounds);
      expandedBounds.inset(-FLING_MARGIN, -FLING_MARGIN);

      if (withinBoundsInDirectionOfTravel(bounds, velocityX, velocityY)
          && expandedBounds.contains(0, 0)) {
        mScroller.fling(
            0,
            0,
            (int) velocityX,
            (int) velocityY,
            bounds.left,
            bounds.right,
            bounds.top,
            bounds.bottom);
        post(this);
      }
    }

    return true;
  }
Ejemplo n.º 2
0
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    mScaleGestureDetector.onTouchEvent(event);

    if (!mScaling) mGestureDetector.onTouchEvent(event);

    if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
      mUserInteracting = true;
    }
    if (event.getActionMasked() == MotionEvent.ACTION_UP) {
      mScrollDisabled = false;
      mUserInteracting = false;

      View v = mChildViews.get(mCurrent);
      if (v != null) {
        if (mScroller.isFinished()) {
          // If, at the end of user interaction, there is no
          // current inertial scroll in operation then animate
          // the view onto screen if necessary
          slideViewOntoScreen(v);
        }

        if (mScroller.isFinished()) {
          // If still there is no inertial scroll in operation
          // then the layout is stable
          postSettle(v);
        }
      }
    }

    requestLayout();
    return true;
  }
Ejemplo n.º 3
0
 public void moveToNext() {
   View v = mChildViews.get(mCurrent + 1);
   if (v != null) slideViewOntoScreen(v);
 }
Ejemplo n.º 4
0
 public void moveToPrevious() {
   View v = mChildViews.get(mCurrent - 1);
   if (v != null) slideViewOntoScreen(v);
 }