コード例 #1
0
  @Override
  protected void dispatchDraw(Canvas canvas) {

    if (mPageCount < 1) {
      return;
    }

    if (!mScroller.isFinished() && mScroller.computeScrollOffset()) {
      setFlipDistance(mScroller.getCurrY());
    }

    if (mIsFlipping || !mScroller.isFinished() || mPeakAnim != null) {
      showAllPages();
      drawPreviousHalf(canvas);
      drawNextHalf(canvas);
      drawFlippingHalf(canvas);
    } else {
      endScroll();
      setDrawWithLayer(mCurrentPage.v, false);
      hideOtherPages(mCurrentPage);
      drawChild(canvas, mCurrentPage.v, 0);

      // dispatch listener event now that we have "landed" on a page.
      // TODO not the prettiest to have this with the drawing logic,
      // should change.
      if (mLastDispatchedPageEventIndex != mCurrentPageIndex) {
        mLastDispatchedPageEventIndex = mCurrentPageIndex;
        postFlippedToPage(mCurrentPageIndex);
      }
    }

    // if overflip is GLOW mode and the edge effects needed drawing, make
    // sure to invalidate
    if (mOverFlipper.draw(canvas)) {
      // 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();
    }
  }