Ejemplo n.º 1
0
  @Override
  protected void dispatchDraw(Canvas canvas) {

    if (mPageCount < 1) {
      return;
    }

    boolean needsInvalidate = false;

    if (!mScroller.isFinished() && mScroller.computeScrollOffset()) {
      mFlipDistance = mScroller.getCurrY();
      needsInvalidate = true;
    }

    if (mIsFlipping || !mScroller.isFinished() || mPeakAnim != null) {
      drawPreviousHalf(canvas);
      drawNextHalf(canvas);
      drawFlippingHalf(canvas);
    } else {
      endScroll();
      final int currentPage = getCurrentPageFloor();
      if (mCurrentPage != currentPage) {
        postRemoveView(getChildAt(0));
      }
      final View v = viewForPage(currentPage);
      if (mCurrentPage != currentPage) {
        postAddView(v);
        postFlippedToPage(currentPage);
        mCurrentPage = currentPage;
        mCurrentPageId = mAdapter.getItemId(mCurrentPage);
      }
      setDrawWithLayer(v, false);
      v.draw(canvas);
    }

    // if overflip is GLOW mode and the edge effects needed drawing, make
    // sure to invalidate
    needsInvalidate |= mOverFlipper.draw(canvas);

    if (needsInvalidate) {
      // always invalidate whole screen as it is needed 99% of the time.
      // This is because of the shadows and shines put on the non-flipping
      // pages
      invalidate();
    }
  }