private void drawFlippingHalf(Canvas canvas) { final View v = viewForPage(getCurrentPageRound()); setDrawWithLayer(v, true); final float degreesFlipped = getDegreesFlipped(); canvas.save(); mCamera.save(); if (degreesFlipped > 90) { canvas.clipRect(isFlippingVertically() ? mTopRect : mLeftRect); if (mIsFlippingVertically) { mCamera.rotateX(degreesFlipped - 180); } else { mCamera.rotateY(180 - degreesFlipped); } } else { canvas.clipRect(isFlippingVertically() ? mBottomRect : mRightRect); if (mIsFlippingVertically) { mCamera.rotateX(degreesFlipped); } else { mCamera.rotateY(-degreesFlipped); } } mCamera.getMatrix(mMatrix); positionMatrix(); canvas.concat(mMatrix); v.draw(canvas); drawFlippingShadeShine(canvas); mCamera.restore(); canvas.restore(); }