private boolean stepAnimation(long now) { if (now > mHalfwayPoint) { mHalfwayPoint = Long.MAX_VALUE; } if (mFinishAnimReady && mFinishAnimStartTime < 0) { if (DEBUG_STATE) Slog.v(TAG, "Step: finish anim now ready"); mFinishAnimStartTime = now; } if (TWO_PHASE_ANIMATION) { mMoreStartExit = false; if (mStartExitAnimation != null) { mMoreStartExit = mStartExitAnimation.getTransformation(now, mStartExitTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Stepped start exit: " + mStartExitTransformation); } mMoreStartEnter = false; if (mStartEnterAnimation != null) { mMoreStartEnter = mStartEnterAnimation.getTransformation(now, mStartEnterTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Stepped start enter: " + mStartEnterTransformation); } } if (USE_CUSTOM_BLACK_FRAME) { mMoreStartFrame = false; if (mStartFrameAnimation != null) { mMoreStartFrame = mStartFrameAnimation.getTransformation(now, mStartFrameTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Stepped start frame: " + mStartFrameTransformation); } } long finishNow = mFinishAnimReady ? (now - mFinishAnimStartTime) : 0; if (DEBUG_STATE) Slog.v(TAG, "Step: finishNow=" + finishNow); if (TWO_PHASE_ANIMATION) { mMoreFinishExit = false; if (mFinishExitAnimation != null) { mMoreFinishExit = mFinishExitAnimation.getTransformation(finishNow, mFinishExitTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Stepped finish exit: " + mFinishExitTransformation); } mMoreFinishEnter = false; if (mFinishEnterAnimation != null) { mMoreFinishEnter = mFinishEnterAnimation.getTransformation(finishNow, mFinishEnterTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Stepped finish enter: " + mFinishEnterTransformation); } } if (USE_CUSTOM_BLACK_FRAME) { mMoreFinishFrame = false; if (mFinishFrameAnimation != null) { mMoreFinishFrame = mFinishFrameAnimation.getTransformation(finishNow, mFinishFrameTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Stepped finish frame: " + mFinishFrameTransformation); } } mMoreRotateExit = false; if (mRotateExitAnimation != null) { mMoreRotateExit = mRotateExitAnimation.getTransformation(now, mRotateExitTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Stepped rotate exit: " + mRotateExitTransformation); } mMoreRotateEnter = false; if (mRotateEnterAnimation != null) { mMoreRotateEnter = mRotateEnterAnimation.getTransformation(now, mRotateEnterTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Stepped rotate enter: " + mRotateEnterTransformation); } if (USE_CUSTOM_BLACK_FRAME) { mMoreRotateFrame = false; if (mRotateFrameAnimation != null) { mMoreRotateFrame = mRotateFrameAnimation.getTransformation(now, mRotateFrameTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Stepped rotate frame: " + mRotateFrameTransformation); } } if (!mMoreRotateExit && (!TWO_PHASE_ANIMATION || (!mMoreStartExit && !mMoreFinishExit))) { if (TWO_PHASE_ANIMATION) { if (mStartExitAnimation != null) { if (DEBUG_STATE) Slog.v(TAG, "Exit animations done, clearing start exit anim!"); mStartExitAnimation.cancel(); mStartExitAnimation = null; mStartExitTransformation.clear(); } if (mFinishExitAnimation != null) { if (DEBUG_STATE) Slog.v(TAG, "Exit animations done, clearing finish exit anim!"); mFinishExitAnimation.cancel(); mFinishExitAnimation = null; mFinishExitTransformation.clear(); } } if (mRotateExitAnimation != null) { if (DEBUG_STATE) Slog.v(TAG, "Exit animations done, clearing rotate exit anim!"); mRotateExitAnimation.cancel(); mRotateExitAnimation = null; mRotateExitTransformation.clear(); } } if (!mMoreRotateEnter && (!TWO_PHASE_ANIMATION || (!mMoreStartEnter && !mMoreFinishEnter))) { if (TWO_PHASE_ANIMATION) { if (mStartEnterAnimation != null) { if (DEBUG_STATE) Slog.v(TAG, "Enter animations done, clearing start enter anim!"); mStartEnterAnimation.cancel(); mStartEnterAnimation = null; mStartEnterTransformation.clear(); } if (mFinishEnterAnimation != null) { if (DEBUG_STATE) Slog.v(TAG, "Enter animations done, clearing finish enter anim!"); mFinishEnterAnimation.cancel(); mFinishEnterAnimation = null; mFinishEnterTransformation.clear(); } } if (mRotateEnterAnimation != null) { if (DEBUG_STATE) Slog.v(TAG, "Enter animations done, clearing rotate enter anim!"); mRotateEnterAnimation.cancel(); mRotateEnterAnimation = null; mRotateEnterTransformation.clear(); } } if (USE_CUSTOM_BLACK_FRAME && !mMoreStartFrame && !mMoreRotateFrame && !mMoreFinishFrame) { if (mStartFrameAnimation != null) { if (DEBUG_STATE) Slog.v(TAG, "Frame animations done, clearing start frame anim!"); mStartFrameAnimation.cancel(); mStartFrameAnimation = null; mStartFrameTransformation.clear(); } if (mFinishFrameAnimation != null) { if (DEBUG_STATE) Slog.v(TAG, "Frame animations done, clearing finish frame anim!"); mFinishFrameAnimation.cancel(); mFinishFrameAnimation = null; mFinishFrameTransformation.clear(); } if (mRotateFrameAnimation != null) { if (DEBUG_STATE) Slog.v(TAG, "Frame animations done, clearing rotate frame anim!"); mRotateFrameAnimation.cancel(); mRotateFrameAnimation = null; mRotateFrameTransformation.clear(); } } mExitTransformation.set(mRotateExitTransformation); mEnterTransformation.set(mRotateEnterTransformation); if (TWO_PHASE_ANIMATION) { mExitTransformation.compose(mStartExitTransformation); mExitTransformation.compose(mFinishExitTransformation); mEnterTransformation.compose(mStartEnterTransformation); mEnterTransformation.compose(mFinishEnterTransformation); } if (DEBUG_TRANSFORMS) Slog.v(TAG, "Final exit: " + mExitTransformation); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Final enter: " + mEnterTransformation); if (USE_CUSTOM_BLACK_FRAME) { // mFrameTransformation.set(mRotateExitTransformation); // mFrameTransformation.compose(mStartExitTransformation); // mFrameTransformation.compose(mFinishExitTransformation); mFrameTransformation.set(mRotateFrameTransformation); mFrameTransformation.compose(mStartFrameTransformation); mFrameTransformation.compose(mFinishFrameTransformation); mFrameTransformation.getMatrix().preConcat(mFrameInitialMatrix); if (DEBUG_TRANSFORMS) Slog.v(TAG, "Final frame: " + mFrameTransformation); } final boolean more = (TWO_PHASE_ANIMATION && (mMoreStartEnter || mMoreStartExit || mMoreFinishEnter || mMoreFinishExit)) || (USE_CUSTOM_BLACK_FRAME && (mMoreStartFrame || mMoreRotateFrame || mMoreFinishFrame)) || mMoreRotateEnter || mMoreRotateExit || !mFinishAnimReady; mSnapshotFinalMatrix.setConcat(mExitTransformation.getMatrix(), mSnapshotInitialMatrix); if (DEBUG_STATE) Slog.v(TAG, "Step: more=" + more); return more; }