/**
  * {@inheritDoc}
  *
  * <p>Note that canceling a <code>AnimatorSet</code> also cancels all of the animations that it is
  * responsible for.
  */
 @Override
 public void cancel() {
   mTerminated = true;
   if (isStarted()) {
     ArrayList<AnimatorListener> tmpListeners = null;
     if (mListeners != null) {
       tmpListeners = (ArrayList<AnimatorListener>) mListeners.clone();
       for (AnimatorListener listener : tmpListeners) {
         listener.onAnimationCancel(this);
       }
     }
     if (mDelayAnim != null && mDelayAnim.isRunning()) {
       // If we're currently in the startDelay period, just cancel that animator and
       // send out the end event to all listeners
       mDelayAnim.cancel();
     } else if (mSortedNodes.size() > 0) {
       for (Node node : mSortedNodes) {
         node.animation.cancel();
       }
     }
     if (tmpListeners != null) {
       for (AnimatorListener listener : tmpListeners) {
         listener.onAnimationEnd(this);
       }
     }
     mStarted = false;
   }
 }
 /**
  * {@inheritDoc}
  *
  * <p>Note that ending a <code>AnimatorSet</code> also ends all of the animations that it is
  * responsible for.
  */
 @Override
 public void end() {
   mTerminated = true;
   if (isStarted()) {
     if (mSortedNodes.size() != mNodes.size()) {
       // hasn't been started yet - sort the nodes now, then end them
       sortNodes();
       for (Node node : mSortedNodes) {
         if (mSetListener == null) {
           mSetListener = new AnimatorSetListener(this);
         }
         node.animation.addListener(mSetListener);
       }
     }
     if (mDelayAnim != null) {
       mDelayAnim.cancel();
     }
     if (mSortedNodes.size() > 0) {
       for (Node node : mSortedNodes) {
         node.animation.end();
       }
     }
     if (mListeners != null) {
       ArrayList<AnimatorListener> tmpListeners = (ArrayList<AnimatorListener>) mListeners.clone();
       for (AnimatorListener listener : tmpListeners) {
         listener.onAnimationEnd(this);
       }
     }
     mStarted = false;
   }
 }
Пример #3
0
  boolean animationFrame(long currentTime) {
    boolean done = false;
    switch (mPlayingState) {
      case RUNNING:
      case SEEKED:
        float fraction = mDuration > 0 ? (float) (currentTime - mStartTime) / mDuration : 1f;
        if (fraction >= 1f) {
          if (mCurrentIteration < mRepeatCount || mRepeatCount == INFINITE) {
            if (mListeners != null) {
              int numListeners = mListeners.size();
              for (AnimatorListener mListener : mListeners) {
                mListener.onAnimationRepeat(this);
              }
            }
            if (mRepeatMode == REVERSE) {
              mPlayingBackwards = !mPlayingBackwards;
            }
            mCurrentIteration += (int) fraction;
            fraction = fraction % 1f;
            mStartTime += mDuration;
          } else {
            done = true;
            fraction = Math.min(fraction, 1.0f);
          }
        }
        if (mPlayingBackwards) {
          fraction = 1f - fraction;
        }
        animateValue(fraction);
        break;
    }

    return done;
  }
Пример #4
0
 @SuppressWarnings("unchecked")
 private void notifyStartListeners() {
   if (mListeners != null && !mStartListenersCalled) {
     ArrayList<AnimatorListener> tmpListeners = (ArrayList<AnimatorListener>) mListeners.clone();
     int numListeners = tmpListeners.size();
     for (AnimatorListener tmpListener : tmpListeners) {
       tmpListener.onAnimationStart(this);
     }
   }
   mStartListenersCalled = true;
 }
Пример #5
0
 public void cancel() {
   // Only cancel if the animation is actually running or has been started and is about
   // to run
   if (mPlayingState != STOPPED
       || sPendingAnimations.get().contains(this)
       || sDelayedAnims.get().contains(this)) {
     // Only notify listeners if the animator has actually started
     if (mRunning && mListeners != null) {
       ArrayList<AnimatorListener> tmpListeners = (ArrayList<AnimatorListener>) mListeners.clone();
       for (AnimatorListener listener : tmpListeners) {
         listener.onAnimationCancel(this);
       }
     }
     endAnimation();
   }
 }
Пример #6
0
 @SuppressWarnings("unchecked")
 @Override
 public void cancel() {
   AnimationHandler handler = getOrCreateAnimationHandler();
   if (mPlayingState != STOPPED
       || handler.mPendingAnimations.contains(this)
       || handler.mDelayedAnims.contains(this)) {
     if ((mStarted || mRunning) && mListeners != null) {
       if (!mRunning) {
         notifyStartListeners();
       }
       ArrayList<AnimatorListener> tmpListeners = (ArrayList<AnimatorListener>) mListeners.clone();
       for (AnimatorListener listener : tmpListeners) {
         listener.onAnimationCancel(this);
       }
     }
     endAnimation(handler);
   }
 }
Пример #7
0
 @SuppressWarnings("unchecked")
 private void endAnimation(AnimationHandler handler) {
   handler.mAnimations.remove(this);
   handler.mPendingAnimations.remove(this);
   handler.mDelayedAnims.remove(this);
   mPlayingState = STOPPED;
   mPaused = false;
   if ((mStarted || mRunning) && mListeners != null) {
     if (!mRunning) {
       notifyStartListeners();
     }
     ArrayList<AnimatorListener> tmpListeners = (ArrayList<AnimatorListener>) mListeners.clone();
     int numListeners = tmpListeners.size();
     for (AnimatorListener tmpListener : tmpListeners) {
       tmpListener.onAnimationEnd(this);
     }
   }
   mRunning = false;
   mStarted = false;
   mStartListenersCalled = false;
   mPlayingBackwards = false;
 }